- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线性表 链接存储结构与线性表的操作实现 线性表的存储结构 链接存储结构 内存管理方式 通过指针管理存储单元(这组存储单元的内存地址可以是连续的,也可以是不连续的) 什么是结点? 对应数据元素,是一组数据中的个体 什么是链表? 对应一组数据,是数据元素的总体 结点与链表有何关联? 通过链接方式线性地关联到一起的所有结点就是链表 线性表与链接存储结构的映射关系 用链式存储结构的结点存储线性表的数据元素 链接存储结构中结点指针域与后继结点的链接关系表示每个数据元素与其直接后继数据元素间的逻辑关系。 单链表 带头结点的单链表 结点的数据类型 //DataType数据元素的数据类型 typedef int DataType; struct Node //Node为结点类型名 { DataType data; //data代表数据元素 Node *next; //next为指向下一结点的指针 }*head; //head为头指针,指向单链表的头结点 单链表的基本操作 //p、q为指向任意结点的指针 空表:head-next==NULL 表尾:p-next==NULL 指针后移:p=p-next 结点连接:p-next=q 前驱:若p-next=q,则p指向q的前驱结点 //初始化单链表 int InitList (Node * H) { //H为指向单链表的头指针 H=new Node; if(!H) { cout“初始化错误”endl; return 0; } H-next=NULL; return 1; } //判表空 int ListEmpty(Node * H) { //H为指向单链表的头指针 if(H-next) return 0; else //头结点指针域为空 return 1; } //求单链表中当前元素的个数 int ListLength (Node * H) { //H为指向单链表的头指针 Node *p=H-next; int total=0; while(p){ total++; //计数器+1 p=p-next; //指针后移 } return total; } //遍历单链表 void TraverseList(Node * H) { //H为指向单链表的头指针 Node *p=H-next; while(p) { coutp-data“ ”; p=p-next; } coutendl; } 单链表的基本操作 查找结点 添加结点 删除结点 查找指定结点 设置一个跟踪链表结点的指针p,初始时p指向链表中的第一个结点,然后顺着next域依次指向每个结点,每指向一个结点就判断其是否等于指定结点,若是,则返回该结点地址。否则继续向后搜索,直到p为NULL ,表示链表中无此元素,返回NULL。 Node *p=head-next; while(p){ if(p-data==…) break; p=p-next; //p指向下一结点 } //返回第一个与指定值匹配的元素位置 int Find_item(Node * H, DataType item) { //H为指向单链表的头指针 Node *p=H-next; int pos=0; //结点位序 while(p) { //从单链表第一个结点开始顺序查找所有结点 pos++; if(p-data==item) break; p=p-next; } if(p) return pos; //返回位置编号 else return 0; //查找失败 } //获取单链表中指定位置上的数据元素 int Find_pos(Node * H, int pos, DataType *item) { //H为指向单链表的头指针 Node *p=H-next; int i=1; //结点位序 while(p i!=pos){ p=p-next; i++; } if(p==NULL){ //查找不成功,退出运行 cout“位置无效endl; return 0; } *item=p-data; return 1; } 链表任意位置插入法 单链表结点的插入是利用修改结点指针域的值,使其指向新的链接位置来完成插入操作,无需移动任何元素。 假定在链表中指定结点之前插入一个新结点,要完成这种插入必须首先找到所插位置的前一个结点,再进行插入。假设指针p指向待插位置的前驱结点,指针t指向
您可能关注的文档
最近下载
- 信息化系统运维管理规范与实践案例分析.docx VIP
- 2021年全国新高考Ⅰ卷数学真题试卷(含答案).pdf VIP
- BP85956D_CN_DS_Rev.0.91 规格书晶丰明源家电电源.pdf VIP
- 经胸超声心动图检查规范化应用中国专家共识(2024版)解读PPT课件.pptx VIP
- 常用北曲新谱_郑骞.doc VIP
- 1小纸条 高考成语三千 日积月累记练(测试版)001-025 (1).docx
- 《法理学》课件(第五章:法律关系).ppt VIP
- 2025年自习室市场用户付费意愿与自习室服务质量提升策略分析.docx
- 生物安全法的试题及答案.docx VIP
- 《全大学进阶英语综合教程3》Unit-4教案.pdf VIP
文档评论(0)