1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N sizeof(link) 4 typedef struct stu 5 { 6 struct stu *next; 7 int date; 8 }link; 9 void print(link*head)/*打印链表数据*/ 10 { 11 link *p; 12 p=head->next; 13 if(p) 14 do 15 { 16 printf("%d\t",p->date); 17 p=p->next; 18 }while(p); 19 printf("\n"); 20 } 21 link *creat(void)/*创建链表*/ 22 { 23 link *head,*p,*s; 24 head=(link*)malloc(N); 25 head->next=p=(link*)malloc(N); 26 printf("请输入数据输入‘0’结束创建链表:\n"); 27 scanf("%d",&p->date); 28 while(p->date) 29 { 30 p->next=(link*)malloc(N); 31 s=p; 32 p=p->next; 33 printf("请输入数据输入‘0’结束创建链表:\n"); 34 scanf("%d",&p->date); 35 } 36 s->next=NULL; 37 return(head); 38 } 39 link *del(link *head,int m)/*删除指定数据节点*/ 40 { 41 link *p,*last,*s; 42 last=head; 43 p=head->next; 44 while(p) 45 { 46 if(p->date==m) 47 { 48 last->next=p->next; 49 s=p; 50 p=p->next; 51 free(s); 52 } 53 else { 54 last=last->next; 55 p=p->next; 56 } 57 } 58 return head; 59 } 60 link *insert(link *head,int m)/*在m数据结点后插入结点并输入数据*/ 61 { 62 link *p,*pnew; 63 for(p=head->next;p;p=p->next) 64 if(p->date==m) 65 { 66 pnew=(link*)malloc(N); 67 printf("请输入插入的数据:\n"); 68 scanf("%d",&pnew->date); 69 pnew->next=p->next; 70 p->next=pnew; 71 } 72 printf("成功插入结点数据!\n"); 73 return(head); 74 } 75 int main() 76 { 77 link*head; 78 int n; 79 head=creat(); 80 printf("打印未处理的数据:\n"); 81 print(head); 82 printf("\n输入要删除的数据结点:\n"); 83 scanf("%d",&n); 84 printf("打印删除后的链表数据:\n"); 85 print(del(head,n)); 86 printf("\n输入在哪个链表数据后插入结点:\n"); 87 scanf("%d",&n); 88 printf("打印插入后的链表数据:\n"); 89 print(insert(head,n)); 90 return 0; 91 }
测试数据:
请输入数据输入‘0’结束创建链表:
1
请输入数据输入‘0’结束创建链表:
2
请输入数据输入‘0’结束创建链表:
3
请输入数据输入‘0’结束创建链表:
4
请输入数据输入‘0’结束创建链表:
5
请输入数据输入‘0’结束创建链表:
6
请输入数据输入‘0’结束创建链表:
7
请输入数据输入‘0’结束创建链表:
8
请输入数据输入‘0’结束创建链表:
9
请输入数据输入‘0’结束创建链表:
10
请输入数据输入‘0’结束创建链表:
0
打印未处理的数据:
1 2 3 4 5 6 7 8 9 10
输入要删除的数据结点:
7
打印删除后的链表数据:
1 2 3 4 5 6 8 9 10
输入在哪个链表数据后插入结点:
6
打印插入后的链表数据:
请输入插入的数据:
666666
成功插入结点数据!
1 2 3 4 5 6 666666 8 9 10
Press any key to continue