数据结构1.2 发表于 2021-10-04 | 分类于 课程作业 , 数据结构作业 , 第一次作业 , 单链表 | 字数统计: | 阅读时长 ≈ 数据结构第一次作业之单链表代码下载点击下载源代码 代码展示123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238#include<stdio.h>#include<stdlib.h>/*该链表所能存放的数为int整型(-32768~32767之间的整数)*/#define MAXSIZE 100//顺序表最大长度/*定义顺序表*/typedef struct Node{ int num; int length; struct Node *next;}*LNode;void CreateList(LNode *node){ int number; LNode p = node; LNode head = node; printf("请输入您需要输入的数据的个数\n"); number = IsDataNum(); for(int i = 1; i <= number-1; i++){ printf("请输入第%d个节点的数:\n",i); p->num = IsDataNum(); p->next = (LNode *)malloc(sizeof(LNode)); p = p->next; } head->length = number; printf("请输入第%d个节点的数:\n",number); p->num = IsDataNum(); p->next = NULL;}void PrintList(LNode *node){ LNode p = node; int num = 1; while(p!=NULL){ printf("第%d个节点的值为:%d\n",num,p->num); p = p->next; num++; }}LNode DeletePositionList(LNode *node,int num)//?{ LNode p = node; LNode head = node; for (int i = 1; i < num-1; i++){ p = p->next; } if (num != head->length && num != 1){ LNode q = p->next; p->next = p->next->next; free(q); } else if(num != 1){ LNode q = p->next; p->next = NULL; free(q); } else{ p = p->next; return p; } return head;}void DeleteSameList(LNode *node){ LNode p,head,q; q = node; p = node; head = node; while(p != NULL && p->next != NULL){ q = p; while(q->next != NULL){ if(p->num == q->next->num){ LNode ql = q->next; q->next = q->next->next; free(ql); head->length--; continue; } q = q->next; } p = p->next; } PrintList(node);}void DeleteKeyList(LNode *node){ printf("请输入删除的Key值:\n"); int number = IsDataNum(); LNode forehead = (LNode *)malloc(sizeof(LNode)); forehead->next = node; LNode p = forehead; while(p->next != NULL){ if(p->next->num == number){ LNode q = p->next; p->next = p->next->next; free(q); continue; } p = p->next; } PrintList(forehead->next);}void AddList(LNode *node){ printf("不想写了,反正作业没要求,你看着办吧!");}void ExitList(LNode *node){ LNode p = node; while(p->next != NULL){ LNode q = p; p = p->next; free(q); } free(p); printf("已经成功释放所有的空间"); getchar(); exit(1);}int IsLengthNum(LNode *node){ char ch[10]; LNode p = node; scanf("%s",ch); int i = 1; while(ch[i-1]!='\0'){ if(ch[i-1] < '0' || ch[i-1] > '9'){ printf("输入格式错误\n"); printf("请0~%d之内的整数:",p->length); scanf("%s", ch); i = 1; } else{ i++; } } int number = atoi(ch); return number;}void Menu(LNode *node){ char ch[10]; scanf("%s",ch); while(ch[1]!='\0' || ch[0] <= '0' || ch[0] >= '6'){ printf("请键入1~5的整数"); scanf("%s",ch); } switch (ch[0]) { case '1': DeleteSameList(node); break; case '2': DeleteKeyList(node); break; case '3': AddList(node); break; case '4': printf("请输入想删除的节点位置\n"); LNode *m = DeletePositionList(node,IsLengthNum(node)); PrintList(m); break; case '5': ExitList(node); break; }}//获取一个整形,并判断该整形是否合法int IsDataNum(){ char ch[10]; scanf("%s",ch); int i = 1; while(ch[i-1]!='\0'){ if(ch[i-1] < '0' || ch[i-1] > '9'){ printf("输入格式错误\n"); printf("请输入-32768~32767之间的整数:"); scanf("%s", ch); i = 1; } else{ i++; } } int number = atoi(ch); return number;}int main(){ LNode *node = NULL; node = (LNode *)malloc(sizeof(LNode)); CreateList(node);//创建链表 PrintList(node);//打印链表 printf("您已成功创建链表\n*******************************************\n"); printf("请输入你想进行的操作\n"); printf("1:删除重复的节点\n"); printf("2:删除节点中所有的key值\n"); printf("3:插入一个数\n"); printf("4:删除某个节点的数据\n"); printf("5:退出程序\n"); Menu(node);} 打赏 微信支付 支付宝 比特币