建立一个双向循环链表
数据格式
struct elme{
int num;
char yunsuanfu;
int bianshu
struct elme *next;
struct elme *prev
}
算法描述
1.从多边形中任意取一个顶点 对这个顶点两条边 进行运算 比较运算结构,对运算结果比较大的边进行去边运算,实现的动作是 从循环链表变成单链表的过程
动作: 由于我们在建立循环链表的时候,会将第一个建立的节点当做是链表的头节点,所以直接选择头节点head 为要取的节点
伪代码部分
a=head->num yuansuanfu head->next->num; 对一个顶点两条边的运算
b=head->num yuansuanfu head->prev->num;
if(a>=b){ 比较运算结果如果 a>=b 表头变表尾 第二个元素成为新的表头
head->next->num=a;
p=head->next
head->next=NULL;
head=p;
head->prev=NULL
}
else{
head->prev->num=b; 比较运算结果 如果 a<b 表头不变 表尾节点分开
head->prev->next=NULL
head->prev=NULL
}
2.对新形成的双向链表的操作部分
对链表头开始进行边的消除过程
取链表的第二个元素 比较 dingdian=head->next;
代码部分
a=dingdian->num yuansuanfu dingdian->next->num;
b=dingdian->num yuansuanfu dingdian->prev->num;
if(a>=b){
dingdian->num=a;
dingdian->prev=NULL;
head=dingdian;
}
else{
dingdian->num=b;
dingdian->next=dingdian->next->next;
dingdian->next->next->prev=dingdian;
free(dingdian->next);
}
这部分代码是进行比较的
循环条件部分,我就不进行推导了
[
本帖最后由 zhu224039 于 2012-10-17 02:29 编辑 ]