这条题我已经全部改好了。由于时间的关系。我不加注释了。慢慢看就看的明白的。 #include <stdio.h> #include <malloc.h> typedef struct node *point; struct node { int data; point next; };
void print(point head)//输出链表 { point p; p=head->next; while(p != NULL) { printf("%d -> ",p->data); p=p->next; } printf("NULL\n"); }
void revers(point head)//链表逆转置 { point p,q,r; p=head->next; q=head->next; r=q->next; if(p==NULL || q==NULL) printf("该链表无须转置。"); p->next=NULL; p=q; while(r->next) { q=r; r=r->next; q->next=p; p=q; } r->next=p; head->next=r; }
point Insert(point p,int x)//按升序插入数据,有重复数据 { point head, q,r; head = p; q = p->next; while(q != NULL && q->data<x) { p=p->next; q=q->next; } r=(struct node *)malloc(sizeof(struct node)); if(!r) printf("分配失败"); r->data=x; r->next=NULL; if(q == NULL) p->next = r; else { r->next=q; p->next = r; } return head; }
point creat()//任意顺序输入数据,建立升序链表 { int x; point p; point head;
head=(struct node *)malloc(sizeof(struct node)); head->next= NULL; if(!head) printf("分配失败/n"); p=head; printf("请输入数字:"); scanf("%d",&x); while(x!=0) { head=Insert(head,x); fflush(stdin);//在此加上清流函数 printf("请输入数字:"); scanf("%d",&x); } printf("您输入的数据为: "); print(head); return head; }
void Delet(point head,int x)//删除所有x { int i=0; point p; point q; point r; p=head; q=head->next; r=NULL; while(q != NULL) { if(q->data==x) { p->next=q->next; q->next = NULL; free(q); i = 1; break; } else { p=q;q=q->next; } } if(i==0) printf("输入的数不存在。"); else { printf("删除后链表变成:"); print(head); } }
void choose(point head) { int x; char grade; printf("a. 插入一个数据\n"); printf("b. 删除一个数据\n"); printf("c. 将该链表逆转置\n"); printf("d. 退出程序\n"); printf("请选择操作:\n"); grade=getchar(); if (grade=='a'||grade=='A') { printf("请输入要插入的数据:"); scanf("%d",&x); Insert(head,x); printf("插入后链表变成:"); print(head); choose(head); } else if (grade=='b'||grade=='B') { printf("请输入要删除的数据:"); scanf("%d",&x); Delet(head,x); printf("删除后链表变成:"); print(head); choose(head); } else if (grade=='c'||grade=='C') { printf("逆转置前链表为:"); print(head); revers(head); printf("逆转置后链表为:"); print(head); } else if (grade=='d'||grade=='D'); else { printf("输入错误,请重新选择:/n"); choose(head); } }
void main() { point head; head=creat(); choose(head); }
生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧