C语言程序设计与数据结构第13章.pptx





《C语言程序设计与数据结构第13章.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计与数据结构第13章.pptx(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 线性表是最基本、最常用的一种数据结构。它在计算机内的存储方法有两种:顺序存储和链式存储,它的主要基本操作是插入、删除和检索等。第1页/共34页13.1 线性表及其基本运算线性表及其基本运算 13.1.1 线性表的定义 线性表是最常用和最简单的一种数据结构。特点是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。英文字母表(A,B,Z)是线性表,表中每个字母是一个数据元素(结点)。扑克牌的点数(2,3,10,J,Q,K,A)也是一个线性表,其中数据元素是每张牌的点数和花色。第2页/共34页 线性表是具有相同数据类型的n(n=0)个数据元素的有限序列,通常记为:(a1,a2,ai-1,a
2、i,ai+1,an)其中n为表长,n0 时称为空表。特点:表中相邻元素之间存在着顺序关系。将 ai-1 称为 ai 的直接前趋,ai+1 称为 ai 的直接后继。就是说:对于ai,当 i=2,.,n 时,有且仅有一个直接前趋 ai-1.,当i=1,2,.,n-1 时,有且仅有一个直接后继 ai+1,而 a1 是表中第一个元素,它没有前趋,an 是最后一个元素,无后继。第3页/共34页13.1.2 线性表的基本运算(1)InitList(L)L是没有初始化的线性表,为L开辟空间并将L置为空表。(2)DestroyList(L)线性表L已存在,将L的存储空间释放。第4页/共34页(3)ClearL
3、ist(L)线性表L已存在,将表L置为空表。(4)emptyList(L)线性表L已存在,如果L为空表则返回真,否则返回假。(5)ListLength(L)线性表L已存在,如果L为空表则返回0,否则返回表中的元素个数。第5页/共34页(6)Locate(L,e)表L已存在,e为线性表中元素或与之同型元素,如果L中存在元素e,则返回元素e所在位置,如果L中不存在元素e,则返回0。(7)Getelem(L,i)表L存在,i为整数,i值合法,即1iListLength(L)。返回线性表L中第i个元素的值,否则提示出错。第6页/共34页(8)InsertList(L,i,e)表L已存在,e的数据类型同
4、线性表中数据元素,且1iListLength(L)+l,在L中第i个位置前插入新的数据元素e,现行表L的长度加1。(9)DeleteList(L,i,e)表L已存在且非空,i为整数,如果1iListLength(L),删除线性表中的第i个数据元素,并用e返回其值,函数值返回真,线性表的长度减1;否则函值返回假。第7页/共34页13.2 13.2 线性表的顺序表示及基本操作线性表的顺序表示及基本操作 13.2.1 线性表的顺序表示 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。第8页/共34页13.2.2 顺序表的基本操作实现
5、1.初始化Status InitList_sq(SqList&L)L.elem=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType);/分配空间 if(!L.elem)exit(OVERFLOW);/若分配空间不成功,返回OVERFLOW L.length=0;/将当前线性表长度置0L.listsize=INIT_SIZE;return OK;/成功返回OK/InitList_sq第9页/共34页2.插入运算 在线性表L中第i个数据元素之前插入数据元素e,插入后使原表长为n的表:(a1,a2,.,ai-1,ai,ai+1,.,an)成为表长为 n+1 表:(
6、a1,a2,.,ai-1,e,ai,ai+1,.,an)其中 i 的取值范围为1=i=n+1。第10页/共34页用类C语言实现顺序表的插入:Status ListInsert_sq(SqList&L,int i,ElemType x)if(i L.length+1)/判断输入是否合法return ERROR;if(L.length=L.Listsize)/判断空间是否足够 newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW);L.elem=
7、newbase;/修改顺序表的参数 L.listsize+=INCREMENT;q=&(L.elemi-1);/q为插入位置,C语言数组下标从0开始 for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;/移动元素并插入 *q=x;L.length+;return OK;/ListInsert_sq第11页/共34页3.删除运算 线性表的删除运算是指将表中第 i 个元素从线性表中去掉,删除后使原表长为 n 的线性表成为表长为 n-1 的线性表:第12页/共34页用类C语言实现顺序表的删除运算int ListDelete(SQ_LIST*L,int i,Entry
8、Type*e)if(IsEmpty(L)return ERROR;/检测线性表是否为空 if(iL-length)return ERROR;/检查i值是否合理 *e=L-itemi-1;/将欲删除的数据元素内容保留在e所指示的存储单元中 for(j=i;jlength-1;j+)/将线性表第i+1个元素之后的所有元素向前移动 L-item j-1=L-item j;L-length-;/线性表长度减1return OK;/ListDelete第13页/共34页13.3 13.3 线性表的链式存储线性表的链式存储 线性表的链式存储结构不需要用地址连续的存储单元来实现,因为它不要求逻辑上相邻的两个
9、数据元素物理上也相邻,它是通过“链”建立起数据元素之间的逻辑关系,因此对线性表的插入、删除不需要移动数据元素。第14页/共34页13.3.1 单链表 链表是通过一组任意的存储单元来存储线性表中的数据元素的。为建立起数据元素之间的线性关系,对每个数据元素ai,除了存放数据元素的自身的信息 ai 之外,还需要和ai一起存放其后继 ai+1 所在的存贮单元的地址,这两部分信息组成一个“结点”第15页/共34页链表是由一个个结点构成的,结点定义如下:typedef struct LNodeElemType data;/数据域struct LNode *next;/指针域 LNode,*LinkList
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数据结构 13

限制150内