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