- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机软件技术程编基础链表
顺序表的 特点:
运算:简单,时间复杂度好
存储特性:静态规模,编译前确定
问题:程序的通用性和空间利用率之间的矛盾
期望:在实际运行过程中,根据实际问题的需要临时确定存储空间,涉及到动态变量
动态变量:在程序运行的过程中产生和释放的变量。与之相反的是静态变量
静态变量:在程序运行的过程中一直存在的变量。
静态变量是出现在说明语句中的变量;
动态变量由于是在运行中产生的,因而不会事先说明
如何实现动态变量?
通过指针来实现:指针变量的说明,动态变量的产生和释放。;2.3 线性链表及其运算;链表的存储结构;链表结构示意图; 从图中可见,每个结点的存储地址存放在直接前驱的指针域中。所以要访问链表中数据元素C,必须由头指针head得到第一个结点(数据A)的地址,由该结点的指针域得到第二个结点(数据B)的地址,再由其指针域得到存储数据C的结点地址,访问该结点的数据域就可以处理数据C了。链表这种顺着指针链依次访问数据元素的特点,表明链表是一种顺序存储结构,只能顺序操作链表中元素。不能像顺序表(数组)那样可以按下标随机存取。
在链表存储结构中,不要求存储空间的连续性,数据元素之间的逻辑关系由指针来确定。;每个结点由两部分组成:
data 数据域——存放数据值
next指针域——存放后继结点的首地址;单向链表;定义链表结点结构的一般形式为
Struct 结构体名
{
数据成员表;
结构体名 *指针变量名;
};1
67;//建立链表
linklist *create()
{
linklist *head,*p1,*p2;
head=NULL;
int x;
cinx;; p2=p1; //将新的结点作为尾结点
p2-next=NULL;
cinx;
} ;void print( )
{
coutnendl;
;查找运算 的实现
设计思路:设置一个跟踪链表结点的指针p1,初始时p1指向链表中的第一个结点,然后顺着next域依次指向每个结点,每指向一个结点就判断其值是否等于i,若是则返回该结点地址,否则继续往后搜索.
要访问单链表中第i个元素值,必须从头指针开始遍历链表,依次访问每个结点,直到访问到第i个结点为止。其时间复杂度为O(n)。
;linklist *getnode
{
else
{ coutinot been found;
return NULL;
}
};linklist *del(linklist *head, int num)
{
linklist *p1,*p2;
if(head!=NULL)
{
p1=head;
…
…
}
else coutlist is null;
return head;
};if(p1-num==num)
{ if(p1==head)
head=p1-next;
else
p2-next=p1-next;
n=n-1;
}
else coutnumnot been found;
;线性链表的插入:在链式存储结构下的线性表中插入一个新结点;在插入和删除算法中,都是先查询确定操作位置,然后再进行插入和删除操作。所以其时间复杂度均为O(n)。另外在算法中实行插入和删除操作时没有移动元素的位置,只是修改了指针的指向,所以采用链表存储方式要比顺序存储方式的效率高;循环链表;head; 带头结点的单循环链表的操作算法和带头结点的单链表的操作算法很相似,差别仅在于算法中的循环条件不同。在循环单链表上实现上述基本运算的改动如下:
1.初始化链表initlist(head)
创建的头结点指针域next不为空,而是指向自身
head-next=head;2.线性表查找运算*getnode(linklist *head, int i)函数、链表元素输出运算print(linklist *head)函数中,循环遍历是否进行的条件由p!=NULL改为p!=head;
其余函数运算没有变化,请自行写出相关函数的定义。
在循环链表中,除了有头指针head外,有时还可加上一个尾指针tail。尾指针tail指向最后一结点,沿最后一个结点的指针又可立即找到链表的第一个结点。在实际应用中,使用尾指针来代替头指针进行某些操作往往会更简单。
【例】将两个循环链表首尾相接进行合并,La为第一个循环链表表尾指
您可能关注的文档
最近下载
- 附着式升降脚手架施工方案范本.pdf VIP
- 小学四年级英语阅读理解30篇及小学四年级英语作文.doc VIP
- 电梯安装工程管理重难点分析.doc VIP
- 2025年保安员资格证考试题库大全(答案附后面).docx
- 【高考必备】高考总复习系列丛书-高三化学一轮复习考点优化设计(第五辑):考点六十三等效平衡Word版含解析[原创精品].doc VIP
- 米家小米智能门锁 E30使用说明书.pdf
- 统编版道德与法治八年级上册《诚实守信》说课课件.pptx VIP
- 第一单元峥嵘岁月 第1课情感表达 教学设计 人教版初中美术七年级上册.docx VIP
- 大班幼儿参与幼儿园物质环境创设的现状及提升策略.docx VIP
- 省优秀科组申报材料.pdf VIP
文档评论(0)