线性结构常规操作(四)

定义存储结构(以单向链表为主)

对于链表的定义,通过结构体进行定义,包括两部分,一是数据域,另一个就是指针,用于指向下一个节点。

1,创建链表

定义链表:

struct nodesq{int data;//数据域,这里以int为例struct nodesq * netx;//指向自身类型的指针域
}

创建链表:栈式(往前/左走)、队列式(往后/右走)
一般创建链表是通过循环创建的,这里为了方便理解才这样创建的。

struct nodesq *p1,*p2,*p3;
p1 = new nodesq;
p1->date = a1;
p2 = new nodesq;
p2->date = a2;
//p2->next = p1;//栈式,即后来的当head
p1->next = p2;//队列式

如图所示:
在这里插入图片描述

2,链表的查询(按序号、按数据元素)

在这里插入图片描述
例如:找数据域为a3的节点(按数据元素查找)
首先,有头有尾成链才是链表;链表的查询是建立在已创建链表的基础上。
只需要查找p->data是不是a3即可,若不是,接着查找下一个,p=p->next;

head = p;//首先,将给定的head头指针赋值给指针p
while(p->data != a3){//若当前节点的数据域不是a3p = p->next;//进行下一个节点判断
}

例如:找序号为4的节点(按序号查找)
也就是查询4次即可。
首先,有头有尾成链才是链表;链表的查询是建立在已创建链表的基础上。
这里只需要定义一个变量wsq用于存储序号即可,通过自加操作,到达4,则停下即可。

head = p;//首先,将给定的head头指针赋值给指针p
int wsq=0;
while(wsq != 4){//若当前节点的数据域不是a3p = p->next;//进行下一个节点判断wsq++;//序号自加
}
3,链表的插入

在这里插入图片描述
例如:在a3之前插入数据域为a2‘的节点S
首先,有头有尾成链才是链表;链表的查询是建立在已创建链表的基础上。
在a3之前插入a2’,这里关键点在于:①找到a3前的一个节点a2,将新插入的a2‘数据域对应的节点S的next指向a3节点。②a2所在的节点的next指向a2’所在的节点S。

head = p;//首先,将给定的head头指针赋值给指针p
while(p->next->data != a3){//找a3前一个节点p = n->next;//没找到,指针找下一个节点
}//当结束循环之后,p指向a3上一个节点位置
S->next = p->next;//p->next此时为a3所在节点,赋值给S节点的next,即S节点的next指向a3所在节点,此时a2所在节点和S节点的next都指向a3所在的节点
p->next = S;//将a2所在的节点原本指向a3所在节点,给改成指向S节点

最终实现效果图如下:
在这里插入图片描述

4,链表的删除

在这里插入图片描述
例如:删除a3所在的节点
首先,有头有尾成链才是链表;链表的查询是建立在已创建链表的基础上。
删除a3所在的节点,需要找到a3所在的节点之前的一个节点,即a2所在的节点。然后,将a2所在的节点的next指向a3所在节点的下一个节点。

head = p;//首先,将给定的head头指针赋值给指针p
while(p->next->data != a3){//找a3前一个节点p = n->next;//没找到,指针找下一个节点
}//当结束循环之后,p指向a3上一个节点位置,即a2所在的节点
p->next = p->next->next;//p->next->next即a3所在节点的下一个节点,也就是a4所在的节点位置  赋值给  p->next也就是a2所在的节点的next

之后a3需要进行回收一下即可
最后的效果图如下:
在这里插入图片描述

5,链表的输出
p = head;
while(p != NULL){//全部挨个输出printf("%d",p->data);p = p->next;//找下一个节点
}
while(p->next != NULL){//最后一个节点不输出printf("%d",p->data);p = p->next;//找下一个节点
}
6,循环链表

在这里插入图片描述

7,双向链表

在这里插入图片描述

8,带头链表

在这里插入图片描述

9,无头链表

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffplay分析 (暂停 / 播放处理)

《ffplay的数据结构分析》 《ffplay分析(从启动到读取线程的操作)》 《ffplay分析(视频解码线程的操作)》 《ffplay分析(音频解码线程的操作)》 《ffplay 分析(音频从Frame(解码后)队列取数据到…

源码 状态机_[源码阅读] 阿里SOFA服务注册中心MetaServer(1)

[源码阅读] 阿里SOFA服务注册中心MetaServer(1)0x00 摘要0x01 服务注册中心1.1 服务注册中心简介1.2 SOFARegistry 总体架构1.3 为什么要分层0x02 MetaServer2.1简介2.2 问题0x03 代码结构0x04 启动运行4.1 集成部署4.2 独立部署0x05 总体逻辑5.1 程序主体5.2 配置0x06 启动6.1…

HttpService远程校验

今天学了下HttpService,和大家分享一下。HttpService是用来读取远程数据的一个对象,数据格式为XML。 我做了一个登陆校验的功能,主要是通过HttpService将服务器端的用户数据得到,然后在客户端判断输入的用户名和密码是否存在。 主…

免费开源FTP Server软件FileZilla Server

很多朋友在实际应用中都可能需要用到FTP Server类的软件,这类软件有很多,比较知名的有Serv-U、G6等,这里向大家介绍一下FileZilla Server,Windows平台下一款不错的FTP Server软件,而且是免费的、开源的。 S…

Java BigDecimal floatValue()方法与示例

BigDecimal类floatValue()方法 (BigDecimal Class floatValue() method) floatValue() method is available in java.math package. floatValue()方法在java.math包中可用。 floatValue() method is used to convert a BigDecimal to a float value and when this BigDecimal m…

明明的随机数(快排)

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数…

ffplay分析 (seek操作处理)

《ffplay的数据结构分析》 《ffplay分析(从启动到读取线程的操作)》 《ffplay分析(视频解码线程的操作)》 《ffplay分析(音频解码线程的操作)》 《ffplay 分析(音频从Frame(解码后)队列取数据到…

android 代码设置 键盘适应_硬核软件,能在电脑上控制iPhone和Android手机

在电脑上控制手机大概已经不是什么新鲜操作,小米、华为都为自家手机和电脑的联动推出了同屏操作之类的功能,此外也可以通过开源软件Scrcpy来在Windows或者macOS上实现对安卓手机的控制,这些基本都只针对安卓手机。近期,奇客君发现…

网址出现error.aspx?aspxerrorpath=404.htm?aspxerrorpath=的原因及解决办法转

网址出现aspxerrorpath的问题描述 1.网页打不开了,输入网址后就提示error.aspx?aspxerrorpath/about-us.html,到底是什么原因啊? 2.ASP网站自定义了404错误页,但访问不存在的网址时网址错误页后面总多出aspxerrorpath参数,怎么解…

ruby hash方法_Ruby中带有示例的Hash.default(key = nil)方法

ruby hash方法Hash.default(key nil)方法 (Hash.default(keynil) Method) In this article, we will study about Hash.default(keynil) Method. The working of this method can be predicted with the help of its name but it is not as simple as it seems. Well, we will…

回文数、括号匹配(栈操作)

回文数 “xyzyx”是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如“席主席”、“记书记”、“aha”和“ahaha”均是回文,但“ahah”不是回文。输入一行字符(仅包含小写英文字母a~z)请判断这行字符…

ijkplayer 消息循环处理过程分析

ijkplayer 消息循环处理过程分析简介一、消息队列初始化1、 initWithContentURLString函数2、 ijkmp_ios_create函数3、 ijkmp_create函数二、消息队列的消息循环处理函数启动1、prepareToPlay函数2、ijkmp_prepare_async函数3、ijkmp_prepare_async_l函数4、ijkmp_msg_loop函数…

json解析对应的value为null_徒手撸一个JSON解析器

Java大联盟致力于最高效的Java学习关注作者 | 田小波cnblogs.com/nullllun/p/8358146.html1、背景JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 …

[一]设计模式初探

模式,顾名思义,就是做一种事情的方法归纳,就经验来说,做什么事情有个好的方法来应对都是可以事半功倍的,在软件开发中何谓好的模式? 我认为好的模式简单来说就是保证你应对需求变化的时候不用做更多的代码修改&#x…

Gentoo - ssh-agent配置

现在使用类似github这样的service&#xff0c;一般来说都会配置ssh key认证。所以使用ssh-agent来管理私钥就变的必要。在Gentoo下是这么配置的&#xff1a;- sudo emerge -avt keychain- 编辑.bashrc&#xff0c;加入keychain <private key 1 path> ... <private key…

java 方法 示例_Java ArrayDeque offerFirst()方法与示例

java 方法 示例ArrayDeque类offerFirst()方法 (ArrayDeque Class offerFirst() method) offerFirst() Method is available in java.lang package. offerFirst()方法在java.lang包中可用。 offerFirst() Method is used to add the given element at the front of this deque. …

平院Python习题

在读写文件之前&#xff0c;用于创建文件对象的函数是&#xff08; A &#xff09;。 A&#xff0e; open B&#xff0e; create C&#xff0e; file D&#xff0e;folder 解析&#xff1a; open(file, mode‘r’, buffering-1, encodingNone, errorsNone, newlineNone, close…

搭建srs服务器(rtmp)

搭建srs服务器&#xff08;rtmp&#xff09; 目录:1、下载srs源码&#xff08;从码云上&#xff09;&#xff1a;2、 切换到srs.oschina&#xff1a;3、 这里使用3.0版本&#xff1a;4、 切换到trunk&#xff1a;5、 编译&#xff1a;6、 启动&#xff1a;7、查看日志输出&…

MOSS信息管理策略定制(MOSS custom policies)

MOSS引入了信息管理策略&#xff0c;通过给文档库或列表附加一些策略可以实现一些自动化的功能&#xff0c;如自动给文档打标签&#xff0c;强制文档的审核&#xff0c;启用文档的过期&#xff0c;甚至可以在用户打印文档时插入条形码。难么&#xff0c;这么好用的功能是怎么实…

2560介绍_炒股高手收益翻10倍,只因妙用这一招2560战法,看了都不亏了

(本文由公众号越声研究(yslc927yj)整理&#xff0c;仅供参考&#xff0c;不构成操作建议。如自行操作&#xff0c;注意仓位控制和风险自负。)选股是每个刚入市的新股民需掌握的技巧&#xff0c;通过资金选股了解资金流向&#xff0c;善用工具轻松选股&#xff0c;同时多留意行业…