顺序表的类型明及操作.pptxVIP

  • 4
  • 0
  • 约1.78千字
  • 约 11页
  • 2018-09-22 发布于江苏
  • 举报
顺序表的类型明及操作

;;2. 求表长 length_sqlist(l) 定义 求线性表的元素个数 基本思想 l.last 就表示了线性表的长度 算法 int length_sqlist(sqlist l) { return (l.last); };3. 读表元 get_sqlist(l,i) 定义 求线性表 l 的第 i 个数据元素的值 基本思想 数组第i-1个单元就存放着线性表的第i个元素 算法 datatype get_sqlist(sqlist l ,int i ) { return (l.data[i-1]); };4. 定位 locate_sqlist(l,x) 定义 求线性表 l 中值等于 x 的结点序号的最小值,当不存在时结果为 0 基本思想 从前往后依次比较各结点值是否等于x 算法 int locate_sqlist(sqlist l, datatype x) { int i=0; /*从第一个开始查找*/ while ( (i=l.last-1) (l.data[i]!=x) ) i++; /*当前没有找到,继续试下一个*/ if (i=l.last-1) return(i+1); /*在范围内,i+1为结果,注意C语言的数组是从0开始的*/ else return (0); } ;5. 插入 insert_sqlist(l,x,i) 定义 线性表的插入操作是指在表的第i-1个数据元素和第i个数据元素之间插入一个新的 数据元素 (a1,…,ai-1,ai,…,an) = (a1,…,ai-1,x,ai,…,an) 数据ai-1和ai之间的逻辑关系发生了变化 由于逻辑上相邻的数据元素在物理位置上也是相邻的,因此,除非i=n+1,否则必须移动元素才能反映这个逻辑关系的变化。; ;算法 void insert_sqlist(sqlist l,datatype x,int i) { int j; if ( l.last==maxsize) printf(“表满”); /*表容量已到最大值,无法插入*/ else if ( (il.last+1) || (i1) ) 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*/ } } ;6. 删除 delete_sqlist(l,i) 定义 线性表的删除操作是指将表的第i个数据元素删除,使长度为n的线性表: (a1,…,ai-1,ai,ai+1,…,an) 变成长度为n-1的线性表 (a1,…,ai-1,ai+1,…,an) 数据元素ai-1、ai、ai+1之间的逻辑关系发生了变化,和插入操作一样同样需要移动数据元素,除非删除的是最后一个元素。; ;算法 void delete_sqlist(sqlist l, int i) {int j; if (l.last==0) printf(“表空”); /*空表无法删除*/ else if ( (il.last) || (i1) ) printf(“非法位置”); /*位置不合法,无法删除*/ else {for(j=i;j=l.last-1;j++) /*从第i+1个元素到最后一个元素*/ l.data[j-1]=l.data[j]; /*当前元素前移一位*/ l.last--; /*表长减1*/ } }

文档评论(0)

1亿VIP精品文档

相关文档