- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1Character00000线性表
2?2.2线性表2.2.1线性表的基本概念线性表是n个元素的有限序列,它们之间的关系可以排成一个线性序列:a1,a2,...,ai,...,an线性结构中各数据成员之间的线性关系:有直接前驱和直接后继(除最前、最后一个元素)
3在线性表上常用的运算有:初始化求长度取元素修改前插删除检索排序
4设线性表的基地址为:LOC(a1),ai的存储地址为:LOC(ai)=LOC(a1)+(i-1)*k1=i=na1a2aian……Loc(a1)Loc(a1)+kLoc(a1)+(i-1)*kLoc(a1)+(n-1)*k?2.2.2线性表的存储结构及其运算线性表的顺序存储结构把数据元素按照逻辑顺序依次存放到一组连续的存储单元中。
5元素1元素2……..元素n……..01n-1V[0]??线性表的顺序存储结构——可用C语言中的一维数组来描述.#defineM100//定义M为常数100,M的值作为数组的最大容量intV[M];//V是数组的名字,假设数组中的数据元素是整型类型intlength;//当前长度V[1]V[n]V[M-1]
6…..a2a1alength…..ai+1ai01i-1ilength-11顺序表的插入运算ai-1…..a2a1alength…ai+1aixP(P+1)qai-1…..a2a1aiai+1…alengthalength……ai+1aix
7intinsq(inti,intx,intV[],intM,int*p){/*在线性表中V中第i个元素之前插入x,M是存储空间大小,p是指针变量,指向存储表长的变量*/intn,j;n=*p;/*获取表长*/if(n==M){printf(“overflow\n”);return(0);}if(i1‖in+1){printf(“Itiserror\n”);return(0);}//i值不合法else{for(j=n;j=i;j--)V[j]=V[j-1];V[j]=X;*p=++n;//表长加1,有p返回到函数调用处return(1);}}voidmain(){ intM=10,n=4; intresult,k; staticintV[10]={3,5,7,10}; result=insq(2,4,V,M,n); if(result==1){printf(success\n); for(k=0;kn;k++)printf(%d,V[k]);} elseprintf(failure);}
8intdelsq(inti,intV[],int*p){/*在线性表中V中删除第i个元素*/intn,j;if(i1‖in){printf(“Thiselementisnotinthelist\n”);return(0);}//i值不合法else{for(j=i;jn;j++)V[j-1]=V[j];*p=--n;//表长减1return(1);}}voidmain(){ intM=10,n=4; intresult,k; staticintV[10]={3,5,7,10}; result=delsq(2,V,n); if(result==1){printf(success\n); for(k=0;kn;k++)printf(%d,V[k]);} elseprintf(failure);}顺序表的删除运算
9特点:便于随机存取表中的任一个数据元素,做插入、删除时需移动大量元素。静态分配空间,无法动态分配。表中元素个数是动态变化时,按最大空间分配。适用于需要频繁查找操作的线性表
10线性表的链式存储结构?是一种常见的重要的数据结构。它是动态地进行存链表储分配的一种结构。线性表的链式存储结构的含义是指逻辑上相邻的数据元素在内存中的物理存储空间不一定相邻。每个数据元素对应内存一个存储空间,叫存储结点,简称结点。
11
12将线性表的元素放到一个具有头指针的链表中,链表中每个结点包含数据域和指针域。特点:插入、
文档评论(0)