- 1、本文档共108页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话: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 =
文档评论(0)