资源描述:
《顺序表的类型说明及操作.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、顺序表的类型说明#definemaxsize100#definedatatypeint/*以整型为例*/typedefstruct{datatypedata[maxsize];/*存放数据元素*/intlast;/*当前线性表的长度*/}sqlist;sqlistl;声明一个顺序表变量last指示顺序表的当前长度;maxsize指示顺序表当前分配的最大存储空间,可按实际情况调整.1基本操作在顺序表上的实现初始化initiate_sqlist(l)定义使线性表l成为一张空表,即不含任何数据元素基本思想空表的定义:表长为0算法voidinitiate_sqlist(sqlist&l){l.la
2、st=0;}22.求表长length_sqlist(l)定义求线性表的元素个数基本思想l.last就表示了线性表的长度算法intlength_sqlist(sqlistl){return(l.last);}33.读表元get_sqlist(l,i)定义求线性表l的第i个数据元素的值基本思想数组第i-1个单元就存放着线性表的第i个元素算法datatypeget_sqlist(sqlistl,inti){return(l.data[i-1]);}44.定位locate_sqlist(l,x)定义求线性表l中值等于x的结点序号的最小值,当不存在时结果为0基本思想从前往后依次比较各结点值是否等于x
3、算法intlocate_sqlist(sqlistl,datatypex){inti=0;/*从第一个开始查找*/while((i<=l.last-1)&&(l.data[i]!=x))i++;/*当前没有找到,继续试下一个*/if(i<=l.last-1)return(i+1);/*在范围内,i+1为结果,注意C语言的数组是从0开始的*/elsereturn(0);}55.插入insert_sqlist(l,x,i)定义线性表的插入操作是指在表的第i-1个数据元素和第i个数据元素之间插入一个新的数据元素(a1,…,ai-1,ai,…,an)=>(a1,…,ai-1,x,ai,…,an)数
4、据ai-1和ai之间的逻辑关系发生了变化由于逻辑上相邻的数据元素在物理位置上也是相邻的,因此,除非i=n+1,否则必须移动元素才能反映这个逻辑关系的变化。6基本思想示意图7an,…,ai各后移一位将x置入第i位(空位)表长加1a1…ai-1an……下标0last-1…………空闲区maxsize-1aii-2i-1…maxsize-1aian…下标0ilast…………空闲区a1……ai-1i-2i-1…maxsize-1aian…下标0iLast…………空闲区a1……ai-1i-2i-1…x算法voidinsert_sqlist(sqlist&l,datatypex,inti){intj;i
5、f(l.last==maxsize)printf(“表满”);/*表容量已到最大值,无法插入*/elseif((i>l.last+1)
6、
7、(i<1))printf(“非法位置”);/*要求插入的位置不合法,无法插入*/else{for(j=l.last-1;j>=i-1;j--)/*从最后一个元素到第i个元素*/l.data[j+1]=l.data[j];/*当前元素后移一位*/l.data[i-1]=x;/*把x放入第i位*/l.last++;/*表长加1*/}}86.删除delete_sqlist(l,i)定义线性表的删除操作是指将表的第i个数据元素删除,使长度为n的线性表:(a1,…
8、,ai-1,ai,ai+1,…,an)变成长度为n-1的线性表(a1,…,ai-1,ai+1,…,an)数据元素ai-1、ai、ai+1之间的逻辑关系发生了变化,和插入操作一样同样需要移动数据元素,除非删除的是最后一个元素。9基本思想示意图10ai+1,…,an各前移一位表长减1a1…ai-1an……下标0last-2…………空闲区maxsize-1ai+1i-2i-1…maxsize-1ai+1an…下标0ilast-1…………空闲区a1……ai-1i-2i-1…ai算法voiddelete_sqlist(sqlist&l,inti){intj;if(l.last==0)printf(“
9、表空”);/*空表无法删除*/elseif((i>l.last)
10、
11、(i<1))printf(“非法位置”);/*位置不合法,无法删除*/else{for(j=i;j<=l.last-1;j++)/*从第i+1个元素到最后一个元素*/l.data[j-1]=l.data[j];/*当前元素前移一位*/l.last--;/*表长减1*/}}11