- 定义一个单链表类(参照P45-P48),在此基础上添加如下成员函数:
(1)编写一个成员函数:逐个输出单链表中所有数据元素。
(2)编写一个成员函数:单链表定位操作。其定位功能为:在单链表中查找是否存在数据元素x,如果存在,返回单链表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。
(3)编写一个成员函数:删除单链表中所有值为x的元素。
(4)编写一个成员函数:就地逆置单链表中的数据元素。
(5)编写一个成员函数:将单链表中数据元素就地排序。所谓就地排序是指在排序过程中利用原有的结点,不额外增加新结点。
(6)编写一个成员函数:在单链表有序的前提下,插入一个数据元素x,要求插入后的单链表中数据元素从小到大有序排列。 - 将1按要求编写完成后,编写代码进行测试。
逐个输出单链表中所有数据元素。
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
2023预备级研究生 2021-11-09 11:58最佳回答 专家已采纳定义一个单链表类 typedef struct node { int data; struct node *next; }linklist; (1)逐个输出单链表中所有数据元素。 void Printlist(linklist *q) { while(q) { printf("%d ",q->data); q=q->next; } } (2)单链表定位操作。其定位功能为:在单链表中查找是否存在数据元素x,如果存在,返回单链表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。 int ListLocate_L(linkList L, ElemType x) { linkList p=L; int i=0; while(p->next!=0) { if(p->next->data==x){ return i; } else{ p=p->next; i++; } return -1; ] (3)删除单链表中所有值为x的元素。 void delete_X(linkList L,int x){ linkList p = L->next, pre = L, q; //p指针从第一个元素结点开始,pre指针从头结点开始 while(p != NULL){ if(p->val == x){ q = p; //复制给辅助指针q用来释放空间 p = p->next; //p往后遍历 pre->next = p; //将pre->next指向当前p free(q); //上一个值为X的元素已经从链表中删除,释放结点空间 } else { p = p->next; // 这里注意 p 和 pre都要后移,因为pre始终是p的前驱 pre = pre->next; } } } (4)就地逆置单链表中的数据元素。 linklist *InverseLinklist(linklist *q) { linklist *p,*head; p=head->next; if(p!=NULL) { p=p->next; head->next->next=NULL; } while(p!=NULL){ q=p->next; p->next=head->next; head->next=p; p=q; } } (5)将单链表中数据元素就地排序。所谓就地排序是指在排序过程中利用原有的结点,不额外增加新结点。 void SortSingleList(listlist *head) { listlist *pre=head,*p=pre->next,*q,*r; //pre指向head,p指向第一个元素 q=p->next; //q指向待比较节点 p->next=NULL; //第一个节点next截止 NULL while(q!=NULL) { while(pre->next!=NULL && q->data>pre->next->data)//查找插入点的前驱节点 pre=pre->next; r=q->next; //保存待比较的下一个节点 q->next=pre->next; pre->next=q; //插入节点 pre=head; //恢复pre的head q=r; //q指向下一个待比较节点 } } (6)在单链表有序的前提下,插入一个数据元素x,要求插入后的单链表中数据元素从小到大有序排列。 linklist *Insert(linklist *head,int x) { linklist *s,*q; s=(linklist*)malloc(sizeof(linklist)); s->data=x; q=head; if(q->data>x){ s->next=q; head=s; }else{ while(q!=NULL) { if(q->next->data>x){ s->next=q->next; q->next=s; break; } q=q->next; } q=head; } }
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2021-11-08 18:14回答 1 已采纳 定义一个单链表类 typedef struct node { int data; struct node *next; }linklist; (1)逐个输出单链表中所有数据元素。 void Pri
- 2021-12-15 13:50回答 2 已采纳 参考如下: #include <stdio.h> struct StList { int data[100]; int len; }; int main() {
- 2021-06-07 16:52回答 3 已采纳 l=['人','物','选','才'] for i in range(len(l)-1): print(l[0]+l[i+1])
- 2020-06-23 15:50Chaim16的博客 编写一个算法,逐个输出 顺序表 中所有数据元素。设数据元素对的数据类型为int型 题目分析: 要挨个输出顺序表,那咱就得先有一个顺序表才对呀,所以虽然题目中虽然只说输出顺序表中的所有元素,但我们要先...
- 2021-01-21 17:29单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。 表元素域elem用来存放具体...
- 2021-05-21 02:20李傲文的博客 设计单链表是一种链式存取的数据结构,,链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。...
- 2019-11-26 11:45回答 1 已采纳 底层有线程池调度,并行处理的
- 2016-04-04 02:51回答 2 已采纳 1. 7次 2. 45 64 4 35 25 55 82 89 29 10 15
- 2021-12-16 09:20回答 1 已采纳 三、🔆动图演示 初始情况下的数据如 图二-1-1 所示,基本属于乱序,纯随机出来的数据。 图二-1-1 2、算法演示 接下来,我们来看下排序过程的动画演示,总共分为三趟。如 图二-2-1 所示:
- 2020-02-10 13:16她的坏机器人的博客 单链表是一种链式的数据结构,链表中的数据用结点来表示,每个结点由:数据元素和指向下一个数据元素的指针组成,指针就是连接每个结点的地址。 说白了:单链表就是由很多个结点组成,每个结点之间用指针连接着,...
- 2018-04-18 18:52kwenZh的博客 在数据结构中,链表可能是程序员会建立的最简单的数据结构。也是非常基础的一种数据结构,往往简单的东西越需要扎实,大多数的情况是眼高手低觉得很简单差不多,一写代码就出错,一运行就崩溃,完成链表这一数据结构...
- 2018-06-27 09:25极客学伟的博客 数据结构与算法 - 单链表逆转 单链表逆转输出 方案一:head 作为已知首节点,最后节点指向null, 使用三个指针便利链表,逐个节点进行反转 实现思路图解: 实现代码: struct ActList { ActList ...
- 2021-10-11 18:13回答 3 已采纳 for i in range(4): print(a[i]) print(b[i]) print(c[i]) print(d[i])
- 2019-07-04 00:15回答 4 已采纳 这个需要看你的数据量具体有多大, listview控件本身就是view复用的,多条数据,也是重复复用的当前视图区可显示的view数量,上下滑动,将数据反复填入这些view上罢了;并非有多少数据,
- 2022-01-19 18:11回答 1 已采纳 SString temp;temp没有0结尾,导致StrLength(temp)长度计算错误。改成SString temp={0};
- 2018-10-24 09:21Rocky0429的博客 写在之前 在程序设计里,我们经常需要将同为某个...是最基本的数据结构之一,在实际程序中运用非常广泛,比如 Python 中的 list 和 tuple 都可以看作是线性表的实现。 基于各种实际操作等方面的综合考虑,我们提出了...
- 2019-11-10 16:04CareyQ03的博客 上一篇的顺序存储结构中提到,顺序存储结构最大的缺点是 插入和删除时需要移动大量的元素, 这就需要耗费大量的时间。针对这个问题,线性表的链式存储就出现了。 「链式存储」 直接不考虑相邻位置的问题,哪里有位置...
- 2019-05-06 14:24来自江南的你的博客 而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据这么集中,它的数据可以是分散在内存各个角落的,他的增长也是动态的。 对于每个链表来说,它所占用空间的大小和位置是不需要预先分配划定的,可以根据...
- 2015-12-12 13:30回答 1 已采纳 调试下看看呢,是不是代码不正确
- 2021-06-08 20:39ZHY_Kelly的博客 这是一个记录贴,记录一下我在b站学习数据结构课程的作业和一些小小的心得。视频课程是懒猫老师的,老师真的讲得很细,也很认真,附上链接:https://www.bilibili.com/read/cv8013121;这是一个专栏链接,里面记录了...
- 没有解决我的问题, 去提问