动态顺序表的插入算法 Status ListInsert Sq(SqList &L,int i,ElemType e) {/在顺序线性表中第个位置之前插入新的元素© if(i<1ori>L.length-+1)return ERROR;/检验i值的合法性 if(L.length≥L.listsize)八/若表长超过表尺寸则要增加尺寸 newbase =ElemType*)realloc L.elem,(L.listsize LISTINCREMENT)*sizeof ElemType )) if(newbase-NULL)exit(OVERFLOW);/分配失败则退出并报错 L.elem newbase /重置新基址 L.listsize=L.listsiz远+LISTINCREMENT;}/增加表尺寸 realloc(*p,newsize)函数的意思是:新开- 片大小为newsize的连续空间,并把以*p为 首址的原空间数据都拷贝进去
6 realloc (*p, newsize)函数的意思是:新开一 片大小为newsize的连续空间,并把以*p为 首址的原空间数据都拷贝进去。 动态顺序表的插入算法 Status ListInsert_Sq(SqList &L, int i, ElemType e) { //在顺序线性表中第i个位置之前插入新的元素e if( i < 1 or i > L.length+1) return ERROR; // 检验i 值的合法性 if ( L.length ≥ L.listsize ) //若表长超过表尺寸则要增加尺寸 { newbase = ( ElemType* ) realloc ( L.elem , (L.listsize + LISTINCREMENT )* sizeof ( ElemType ) ); if (newbase=NULL )exit( OVERFLOW ) ; //分配失败则退出并报错 L.elem = newbase ; //重置新基址 L.listsize = L.listsize + LISTINCREMENT ; } //增加表尺寸
g=&L.elem[i-1] 儿为插入位置。这是没有头结点的情况 for (p=L.elem[L.tength-1];p>=q -p)*(p+1)=*p 插入位置及之后的元素统统后移,为元素位置 g=e 7插入e ++L.length /增加1个数据元素,则表长+灯 return OK }//ListInsert Sq 动态数组的核心是real loc(void *ptr.,news i ze)函数!
7 q = &L.elem[i-1] ; // q为插入位置。这是没有头结点的情况 for ( p = L.elem[L.length-1] ; p>=q ; -p ) *(p+1) = *p ; //插入位置及之后的元素统统后移, p为元素位置 *q= e ; //插入e ++L.length ; //增加1个数据元素,则表长+1 return OK ; } //ListInsert_Sq 动态数组的核心是realloc(void *ptr, newsize)函数!
动态顺序表的删除算法 Status ListDelete Sq(SqList &L,int i,ElemType &e) {在顺序表L中删除第个元素,用e返回其值 ifi<1ori>L.length)return ERROR;∥i值不合法,返▣ p=&L.elem[i-1]; ∥p是被删除无素的位置 e=*p; /被删除元素的值赋给e qL.elem+L.length-l;从q是表尾的位置 for(+p;p<=q;p+)*(p-1)=*p;/待删元素后面的统统前移 -L.length; 1表长-1 return OK; //ListDelete Sq 8
8 动态顺序表的删除算法 Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i 个元素,用 e 返回其值 if (i < 1 or i > L.length) return ERROR; // i 值不合法,返回 p=&L.elem[i-1]; // p 是被删除元素的位置 e=*p; //被删除元素的值赋给 e q=L.elem+L.length-1; // q 是表尾的位置 for(++p; p<=q; p++) *(p-1) = *p; //待删元素后面的统统前移 -L.length; //表长 - 1 return OK; } //ListDelete_Sq
2.2节小结 线性表顺序存储结构特点:逻辑关系上相邻的两个元素 在物理存储位置上也相邻; 优点:可以随机存取表中任一无素,方便快捷: 缺点:在插入或删除某一元素时,需要移动大量元素。 解决问题的思路:改用另一种线性存储方式: 链式存储结构
9 链式存储结构 2.2节小结 线性表顺序存储结构特点:逻辑关系上相邻的两个元素 在物理存储位置上也相邻; 优点:可以随机存取表中任一元素,方便快捷; 缺点:在插入或删除某一元素时,需要移动大量元素。 解决问题的思路:改用另一种线性存储方式:
第2章线性表 2.1线性表的逻辑结构 2.2线性表的顺序表示和实现 2.3线性表的链式表示和实现 2.4应用举例 10
10 第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例