C语言编程问题
20. 建立一个链表,每个结点包括的成员为:职工号、工资。用一个creat()函数 来建立链表,用list()函数来输出数据。5个职工号为101,103,105,107,109。在此基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。然后再写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表。
#include #include #include struct zg { char num[10]; int salary; struct zg *next; }; void main() { struct zg* head=NULL,*q; struct zg* creat(); void list(struct zg *); struct zg* insert(struct zg *h,struct zg *q); struct zg* del(struct zg *h,char*q); char snum[10]; head=creat(); printf("输出链表内容如下:\n"); list(head); q=(struct zg*)malloc(sizeof(struct zg)); printf("输入新的职工号和工资:"); scanf("%s",q->num); scanf("%d",&q->salary); q->next=NULL; head=insert(head,q); printf("插入结点后的链表内容如下:\n"); list(head); printf("输入被删除的职工号:"); scanf("%s",snum); head=del(head,snum); printf("删除结点后的链表内容如下:\n"); list(head); } struct zg* creat() { struct zg *h=NULL,*cur=NULL,*last=NULL; int count=0; while(1) { cur=(struct zg*)malloc(sizeof(struct zg)); printf("Input the %dth data:",count+1); scanf("%s",cur->num); scanf("%d",&cur->salary); cur->next=NULL; count++; if (strcmp(cur->num,"0")==0) //输入是否终止 { free(cur); break; } if(count==1) // 第1个结点吗? h=cur; else last->next=cur; last=cur; } return h; } void list(struct zg *h) { struct zg *cur; cur=h; while(cur!=NULL) { printf("%s %8d\n",cur->num,cur->salary); cur=cur->next;//指向下一个结点 } } struct zg* insert(struct zg *h,struct zg *q) { struct zg *p1,*p2; p1=p2=h; if(h==NULL) h=q;//链空时 else if(strcmp(q->num,h->num)next=h; h=q; } else { while(strcmp(q->num,p1->num)>0 && p1->next!=NULL) { p2=p1; p1=p1->next; } if( strcmp(q->num,p1->num)next=p1; p2->next=q; } else { //插入链尾 p1->next=q; q->next=NULL; } } return h; } struct zg* del(struct zg *h,char *s) { struct zg *p1,*p2; p1=p2=h; //查找待删除结点的位置 while( (strcmp(s,p1->num)!=0)&& p1->next!=NULL) { p2=p1; p1=p2->next; } if(strcmp(s,p1->num)!=0) printf("没有找到该数据结点!\n"); else { if(h==p1) //删除第1个结点 { h=p1->next; free(p1); } else // 删除的结点不是首结点 { p2->next=p1->next; free(p1); } } return h; } 。
答:========================== 功能:选择排序(由小到大) 返回:指向链表表头的指针 ==========================...详情>>