1.从键盘输入若千大于0的整数,用这些整数构造一个单链表.当用户输入小于等于0的值时,创建链表结束并在终端打印输出这个链表。
2.在链表中查找某结点,如果能找到输出这个结点是第几个结点,如果找不到,输出:找不到此结点。
3.删除指定结点:如果指定的被删除结点存在就删除它,然后打印:已经删除,如果不存在,输出信息:链表中没有此结点,无法删除。
4.删除重复结点:如果链表中有重复的元素,删除重复的元素,使得所有值最多只出现一次,例如,如果链表中有3个结点的值是100,那么需要删除两个值为100的结点。只保留一个值为100的结点。删除重复结点后打印输出整个链表
程序设计题:单链表实验
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- fuill 2022-01-03 19:24关注
功能全部完成,有帮助请采纳!
#include<stdio.h> #include<stdlib.h> typedef struct link_list { int num; struct link_list* next; } STU; void creat(STU* head)//(创建链表) { int n=1; STU* p = NULL, * q = head; while (n >= 0) { scanf("%d", &n); if(n<0) { break; } else { p = (STU*)malloc(sizeof(STU)+1); p->next=NULL; p->num = n; q->next = p; q = p; } } q->next = NULL; } void print(STU* head)//(输出链表) { STU* p=head->next; while (p) { printf("%d ", p->num); p = p->next; } } int search(STU* head, int n) { int j; STU *p; p=head->next; j=1; while (p!= NULL) { if (p->num == n) { printf("该结点位于第%d个\n",j); return j; } p = p->next; j++; } printf("找不到此结点。"); return -1; } void charu(STU* list, int n) { STU *t = list, *in; int i = 0; while (i < n && t != NULL) { t = t->next; i++; } if (t != NULL) { in = (STU*)malloc(sizeof(STU)); puts("输入要插入的值"); scanf("%d", &in->num); in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点 t->next = in;//填充t节点的指针域,把t的指针域重新指向in } else { puts("找不到此结点"); } } void deleted(STU* head, int n)//删除链表(输入学号) { STU *t = head, *in; int i = 0; while (i < n && t != NULL) { in = t; t = t->next; i++; } if (t != NULL) { in->next = t->next; free(t); } else { puts("链表中没有此结点,无法删除。"); } /*STU* p = head->next; while (p && p->num != n) { head = p, p = p->next; } if (p) { head->next = p->next; free(p); } print(head);*/ } int t=0; void dere(STU* head) { STU *d=head->next,*p=head->next,*q; while(d!=NULL)//删除操作 { p=d; q=p->next;//q指向待删除结点 while(q!=NULL) { if(d->num==q->num) { t++;//删除数的次数 p->next=q->next;//p指向q的下一个结点,删除结点q q=q->next; } else { p=q; q=q->next; } } d=d->next; } } int main() { STU* head = (STU*)malloc(sizeof(STU)); int c=250; puts("请输入数值,-1结束:"); creat(head); while(c--) { printf("\n输出链表请扣1\n链表删除重复数值请扣2\n链表查找请扣3\n链表删除请扣4\n输入-1结束\n"); int requst, n; scanf("%d", &requst); switch (requst) { case 1: print(head); break; case 2: dere(head); puts("删除重复数值后:"); print(head); break; case 3: puts("请输入要查找的值:"); scanf("%d", &n); search(head, n); break; case 4: puts("请输入要删除的值:"); scanf("%d", &n); deleted(head, n); printf("删除%d数值后:\n",n); print(head); break; default : break; } if(n==-1) { break; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度