- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1节 线性表的类型定义 1.一个线性表是n个数据元素的有限序列。 (a1, a2, …, an) ai是表项,n是表长度。 第2节 线性表的顺序表示和实现 一、顺序表 1.定义:顺序表是线性表的顺序存储表示的简称,它指的是,“用一组地址连续的存储单元依次存放线性表中的数据元素”。 2.3 线性表类型的实现—链式映象 一、线性链表 2.结点和单链表的C语言描述 typedef struct LNode { ElemType data; // 数据域 struct LNode *next; // 指针域 } LNode, *LinkList; LNode *p; next data p *p (*p)表示p所指向的结点 (*p).data?p-data表示p指向结点的数据域 (*p).next?p-next表示p指向结点的指针域 C语言: 生成一个LNode型新结点: p=(LNode *)malloc(sizeof(LNode)); 系统回收p结点:free(p) C++语言: 生成一个LNode型新结点: p=new LNode; 系统回收p结点:delete(p) 3.单链表的基本运算 (1) 初始化操作 void InitList_L( LinkList L ) { // 创建一个带头结点的空链表,L 为指向头结点的指针 L = new LNode; if (!L) exit(1); // 存储空间分配失败 L-next = NULL; } // InitList_L 算法的时间复杂度为O (1)。 (2) 销毁结构操作 void DestroyList_L( LinkList L) { // 销毁以L为头指针的单链表,释放链表中所有结点空间 while (L) { p = L; L = L-next; delete p; } // while } // DestroyList_L 算法的时间复杂度为O (Listlength(L))。 (3)查找 Status GetElem_L(LinkList L, int i, ElemType e) { p = L-next; j = 1; while (p ji) { p = p-next; ++j; } if ( !p || ji ) return ERROR; e = p-data; return OK; } // GetElem_L 算法的时间复杂度为:O(ListLength(L)) (4)插入 a b ? x p ? s s-next=p-next p-next=s Status ListInsert_L(LinkList L, int i, ElemType e) { p = L; j = 0; while (p j i-1) { p = p-next; ++j; } if (!p || j i-1) return ERROR; s = new LNode; s-data = e; s-next = p-next; p-next = s; return OK; } // LinstInsert_L 算法的时间复杂度为:O(ListLength(L)) (5)删除 p a b c ? ? p-next=p-next-next q=p-next; p-next=q-next; free(q); Status ListDelete_L(LinkList L, int i, ElemType e) { p = L; j = 0; while (p-next j i-1) { p = p-next; ++j; } if (!(p-next) || j i-1) return ERROR; // 删除位置不合理 q = p-next; p-next = q-next; // 删除并释放结点 e = q-data; free(q); return OK; } // ListDelete_L 算法的时间复杂度为:O(ListLength(L)) 算法:建立一个单链表 基本思想:从“空表”的初始状态,依次建立各元素结点,并逐个插入链表。 void CreateList_L(LinkList L, int n) { //逆位序输入n个元素的值,建立带表头结点的单链线性表L。 L=new LNode; L-next=NULL; //先建立一个带头结点的单链表 for(i = n; i 0; --i) { p =New LNode; //生成新结点 cinp-data; // 输入元素值 p-next=L-next;L-next =
您可能关注的文档
最近下载
- 2022中国能建校园招聘试题及答案解析.docx VIP
- 2025中国能建电规总院招聘(北京)笔试备考题库及答案解析.docx VIP
- 年产200吨聚烯烃催化剂技改项目环评报告书.pdf
- 上海浦东新区中小学教师考试题目汇总2024.docx VIP
- 血细胞形态识别培训课件终版.ppt VIP
- (一模)吉林市2025-2026学年度高三第一次调研测试 英语试卷(含答案解析).docx
- 《汽车维修质量检验》电子教案.pdf
- 工程勘测设计行业质量管理体系专业审核作业指导书.PDF VIP
- 2.2开通抖音直播《直播营销》教学课件.pptx VIP
- 综合实践进位制的认识与探究课件人教版七年级数学上册(1).pptx
原创力文档


文档评论(0)