1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define LEN sizeof(struct Node) struct Node { int num; int score; struct Node *next; };
struct Node *creat() { int n; struct Node *head; struct Node *p1, *p2; n=0; p1=p2=(struct Node *)malloc(LEN); printf("输入第1位同学的学号和分数并以空格或回车隔开(若想结束 输入 “0”“空格或回车”“0”)\n"); scanf("%d%*c%d",&(p1->num),&(p1->score)); while(p1->num!=0) { n=n+1; printf("输入第%d位同学的学号和分数并以空格或回车隔开\n",n+1); if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct Node *)malloc(LEN); scanf("%d%*c%d",&(p1->num),&(p1->score)); } p2->next=NULL; return(head); }
void print(struct Node *head) { struct Node *p; p=head; if(p!=NULL) { for(;p!=NULL;) { printf("第%d同学%d分\n",p->num,p->score); p=p->next; } } }
struct Node *del(struct Node *head) { struct Node *q, *w, *e; q=w=head; int a; printf("请输入您想删除的学生的学号\n"); scanf("%d",&a); if(a!=q->num) { while(a!=q->num) { w=q; q=q->next; if(q==NULL) { printf("没有这个学生\n"); exit(1); } }; e=w->next; w->next=q->next; free(e); } else { e=head; head=head->next; free(e); } return(head); }
struct Node *insert(struct Node *head) { struct Node *q, *w, *e, *r; q=w=head; int a; printf("请输入您想插入在哪个学生的前面\n"); scanf("%d",&a); if(a!=q->num) { do { w=q; q=q->next; if(q==NULL) { printf("没有这个学生\n"); exit(1); } }while(a!=q->num); e=(struct Node *)malloc(LEN); printf("输入同学的学号和分数并以空格或回车隔开\n"); scanf("%d%*c%d",&(e->num),&(e->score)); w->next=e; e->next=q; } else { e=(struct Node *)malloc(LEN); printf("输入同学的学号和分数并以空格或回车隔开\n"); scanf("%d%*c%d",&(e->num),&(e->score)); r=head; head=e; e->next=r; } return(head); }
void main() { int select; struct Node *head; head=creat(); while(1) { printf("请选择要执行的操作:\n1.插入 2.删除 3.输出链表元素 4.退出\n"); scanf("%d",&select); switch(select) { case 1 : head=insert(head);break; case 2 : head=del(head);break; case 3 : print(head);break; case 4 : exit(1);break; default : printf("输入有误!");break; } } }
|