已知顺序表中的元素按值非递减有序排列,编写一个函数删除表中多余的值相同的元素。(提示:值相同的元素

2025-01-06 11:28:21
推荐回答(1个)
回答1:

代码如下运行通过: #include #include #include typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*Sqlist; void IniList(Sqlist *L) /*初始化*/ { *L=(Sqlist)malloc(sizeof(Node)); (*L)->next=*L; } void Create_cLinkList(Sqlist L) /*尾插法建立链表*/ { Node *s; int c; int flag=1; bool bl; L->data=NULL; L->next=NULL; while(flag) { bl=scanf("%d",&c); if(bl) { s=(Node *)malloc(sizeof(Node)); s->data=c; s->next=L->next; L->next=s; } else { flag=0; } } } void Treserve( Sqlist &L) /*比较链表中的每个数字,重复就删除*/ { Node *p; Node *s; s=p=L->next; while(p->next!=NULL) { p=s; p=p->next; if(s->data==p->data) { if(p->next==NULL) s->next=NULL; else s->next=p->next; } else { s=p; } } } main() { Sqlist la; Node *p; Node *s; IniList(&la); printf("输入循环单链表A数据,按从小到大的顺序输入,输入$符号结束:\n"); Create_cLinkList(la); Treserve( la); s=la; p=la->next; while(s->next!=NULL) /*输出改变后的链表*/ { printf("%d",p->data); s=p; p=p->next; } }