- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
讲述内容 线性表基本概念 线性表的ADT 顺序表 链表 应用 作业 有一个线性表L=(‘a’,’c’,’a’,’d’,’b’),求ListLength(L),ListEmpty(L),GetElem(L,3,e),ListInsert(L,4,’e’)的执行结果。 2.2 顺序表 顺序表特点 顺序表实现 顺序表常用操作 初始化 插入元素 删除元素 查找元素 求表长 2.2.2顺序表的定义 顺序表要素 表的长度length :定义一个整型变量来存储线性表的长度。 元素类型为通用类型标识符ElemType data[MaxSize]表中的元素:定义一个数组来存储线线表中的所有元素 定义实现 1.顺序表的类型描述:用静态数组描述 #define MAXSIZE 1024 typedefe int ElemType; //假设ElemType为int类型 typedef struct {ElemType data[MAXSIZE];int length; //length成员存放线性表的实际长度 } SqList;SqList L;说明:由于C/C++中数组的下标从0开始,线性表的第i个元素ai存放顺序表的第i-1位置上。 typedef typedef char ElemType; typedef int ElemType; typedef char * ElemType; ElemType p; typedef char[100] ElemType; ElemType a; typedef struct stu ElemType; ElemType j;结构体的概念 结构体类型定义 struct {int day,month,year;}; struct Date {int day,month,year;}; 结构体变量的定义 先定义结构体类型名再定义该种类型的变量 定义类型的同时定义结构体类型变量 结构体变量的引用 struct {int day,month,year;} brith,school; struct Date {int day,month,year;} brith,school; struct Date brith,school; typedef struct {ElemType data[MAXSIZE];int length;} SqList; SqList Lc,La,Lb; struct {ElemType data[MAXSIZE];int length;} SqList; 2.2.3 顺序表基本运算的实现 线性表的基本运算如下:(1) 初始化线性表InitList(L):构造一个空的线性表L。(2) 销毁线性表DestroyList(L):释放线性表L占用的内存空间。 查找的算法 从头到尾(1---L.length)逐个查找比较 每个元素和e判断是否相等 相等 ,停止查找 不相等,继续 思考:查找出所有和e相等的元素该如何修改程序呢?? For (i=0;iL.lenght;i++) if(L.data[i]==e) break; i=0; While(iL.lenght(L.data[i]!=e)) i++; 算法的思想 想在第i个位置插入元素 判断i的合法性(1—Length+1) 要搬家腾位置(i--Length)后移动一个位置 后移动的方法:从尾部到i(包括) data[k]—date[k+1] L.data[k+1]= L.data[k]; 插入e到I L.data[i]=e; L.length++; 插入的规律 在n个元素中插入e到第i位置,后移动的元素个数为(n-i+1); 插入的位置(1—length+1) 顺序表上的基本运算 插入运算 时间复杂度分析 插入运算 假设pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时需要移动元素次数的期望值为: 删除元素的算法 在指定的位置i删除一个元素,并保存到e 首先清除该元素到e 从(i+1--length)的元素前移动一个位置 L.data[k-1]=L.data[k] 表的长度减少1 归纳:有n个数据的话,要删除的位置为i,将前移动(n-i) if(i1||ilength )exit ; else { e=L.data[i]; For(k=i+1,k=length;k++) L.data[k-1]=L.data[k]; Length--; } 删除运算 删除运算 假设qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素时需要移动元素次数的期望值为: 顺序表的应用 例2.4 已知长度为n的线性表A采用顺序存储结构,编写一个时间复杂度为O(n)
文档评论(0)