计算机软件基础 线性表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机软件基础 线性表

问3:在什么情况下用顺序表比链表好? 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。 若线性表的长度变化不大,且其主要操作是查找,则采用顺序表; 若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。 答: 具体要求 顺序表 链表 基于空间 适于线性表长度变化不大,易于事先确定其大小时采用。 适于当线性表长度变化大,难以估计其存储规模时采用。 基于时间 由于顺序表是一种随机存储结构,当线性表的操作主要是查找时,宜采用。 链表中对任何位置进行插入和删除都只需修改指针,所以这类操作为主的线性表宜采用链表做存储结构。若插入和删除主要发生在表的首尾两端,则宜采用尾指针表示的单循环链表。 应用实例1 删除顺序表la中所有值为x的数据元素。设顺序表的数据结构定义为: #define MAX 100 typedef int DataType; typedef struct { DataType List[MAX]; int num; /*最后一个数据元素的下标*/ }SeqList; void DeleteSeqList ( SeqList *la , DataType x ) { int j, k ; for (j=0; j=la-num; j++ ) { if (la-List [j]==x) { for (k=j ;kla-num;k++) la-List [k]=la-List [k+1]; la-num--; j- - ; } } } 应用实例2 删除顺序表a中第i(i=0)个元素起的k个元素。 #define MAX 100 typedef int DataType; typedef struct { DataType List[MAX]; int num;/*最后一个数据元素的下标*/ }SeqList; int DeleteK(SeqList *a,int i,int k) { int j; if(a-num0) { printf(“顺序表已空!\n”); return 0; } else if (i0||k0||i+k-1a-num) return 0; else { for(j=i;j=a-num-k;j++) a-List[j]=a-List[j+k]; a-num= a-num-k; return 1;} } /*判断表是否为空*/ /*判断删除位置、个数是否合理*/ /*删除从第i个元素开始的k个元素*/ 应用实例3 在有序(从小到大)顺序表中插入值为x的数据元素以保持顺序表的有序性。 #define MAX 100 typedef int DataType; typedef struct { DataType List[MAX]; int num;/*最后一个数据元素的下标*/ }SeqList; int Orderlnsert (SeqList *L , DataType x ) { int i ; if (L-num==Max-1) { printf (“ 顺序表已满”); return 0;} else { for (i=L-num; i=0 x L-List[i] ; i--) L-List[i+1]= L-List[i]; L-List[i+1]=x; L-num++; return 1; } } 应用实例4 实现单链表的就地逆序。设其头结点的指针为head,编写一个算法将单链表逆置。 单链表的逆转 head p q q a1 a2 ` a3 a4 a0 head head a0 head q a0 a1 a0 a1 a2 a0 a1 a2 a3 a4 a1 a2 a3 a4 a2 a3 a4 a3 a4 p p head a0 a1 a2 a3 a4 p p h

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档