您的当前位置:首页正文

双向链表

2020-08-23 来源:意榕旅游网
#include #include #define list_size 100 typedef struct stu{ int data;

struct stu *prior; struct stu *next;

}lode,*linklist;

void Creat(linklist &L)//建立双向链表 {

L=(linklist)malloc(sizeof(lode));//为链表申请空间,建立头结点 L->prior=L; L->next=L; int l;

printf(\"请输入您要插入的元素个数: \"); scanf(\"%d\

printf(\"请输入您要插入的元素: \"); linklist p,pp; pp=L;

while(l--)//给链表插入元素 { }

//输入元素

p=(linklist)malloc(sizeof(lode)); scanf(\"%d\//插入元素 p->prior=pp; pp->next=p; p->next=L; L->prior=p; //指针后移 pp=p;

}

void Show(linklist L)//输出双向链表信息 { }

linklist p; p=L->next;

printf(\"双向链表元素为:\\n\"); while(p!=L) { }

printf(\"%d \p=p->next;

void Delete(linklist &L)//删除元素 {

linklist p,pp; int x;

printf(\"输入您要删除的元素:\\n\"); scanf(\"%d\p=L->next;

while(p!=L)//可以删除所有与x相等的元素 { }

if(p->data==x) {

p->prior->next=p->next; p->next->prior=p->prior; pp=p; p=p->next; free(pp);

}

p=p->next;

printf(\"删除完成!\\n\"); }

void insert(linklist &L)//插入元素(假设原始链表是有序的) { linklist p,pp; printf(\"输入您要插入的元素:\\n\");

pp=(linklist)malloc(sizeof(lode)); scanf(\"%d\

p=L->next;

while(p->datadata&&p!=L)//找到插入的位置

p=p->next; //插入结点

printf(\"插入之后的序列为:\\n\"); Show(L);

p->prior->next=pp; pp->prior=p->prior; pp->next=p; p->prior=pp;

}

int judje(linklist L)//判断对称性 {

linklist p,q;

p=L->next;//头指针

q=L->prior;//尾指针

while(p->data==q->data)//判断相等 { if((p->next==q&&q->prior==p)||p->next==q->prior)//如果两个指针相遇,退出 break; }

//否则头指针后移,尾指针前移 p=p->next;

q=q->prior;

if(p->data==q->data)//退出的时候如果两指针的值是相等的返回1,否则返回0

return 1; return 0;

}

void change(linklist &L)//将奇数元素置前,偶数置后。 {

linklist p,pp,q; p=L->next; while(p!=L) {

if(p->data%2)//如果是奇数元素 { }

else//为偶数时不作处理,指针后移 p=p->next;

//取出这个元素

p->prior->next=p->next; p->next->prior=p->prior;

//将这个元素的值赋给新的指针 pp=(linklist)malloc(sizeof(lode)); pp->data=p->data;

//将这个指针插入到表头 pp->next=L->next; L->next->prior=pp; pp->prior=L; L->next=pp;

//指针后移并删除此节点 q=p; p=p->next; free(q);

}

printf(\"处理后的序列为:\\n\");

Show(L); }

void list()

{

printf(\"\\n\"); printf(\"\\*************************\\n\");

printf(\"\\* 建立双向链表 1\\n\"); printf(\"\\* 输出双向链表 2\\n\");

printf(\"\\* 删除指定元素x 3\\n\"); printf(\"\\* 插入元素e仍保持有序 4\\n\"); printf(\"\\* 判断对称性 5\\n\"); printf(\"\\* 修改链表使得奇数在前边 6\\n\"); printf(\"\\* 结束 7\\n\"); printf(\"\\n\");

printf(\"请输入您需要的操作:\\n\");

}

int main() { }

int n;

list();

scanf(\"%d\linklist L; while(n!=7) { }

switch(n) {

case 1:{Creat(L);printf(\"链表建立完成!\\n\");break;} case 2:{Show(L);break;} case 3:{Delete(L);break;} case 4:{insert(L);break;}

case 5:{printf(\"%d\\n\case 6:{change(L);break;}

default:printf(\"请输入有效指令!\\n\"); } list();

scanf(\"%d\

return 0;

因篇幅问题不能全部显示,请点此查看更多更全内容