以下程序实现顺序表的基本操作定义和初始化 //符号常量的定义 #define OK 1 #define ERROR 0 #define MAXSIZE 100 #define overflow -2 typedef int status; //函数返回类型默认为int typedef int Elemtype;//数据元素类型默认为int /**********************************************************/ //顺序表的结构体定义; /**********************************************************/ typedef struct { Elemtype elem[MAXSIZE];//采用数组来实现顺序表元素的存储 int length; }Sqlist; /********************************************************/ //顺序表中函数声明 /*******************************************************/ //(1)顺序表的初始化定义; status InitList(Sqlist &L); //(2)顺序表的查找操作,成功就返回找到元素的位序,否则返回0; int LocateElem(Sqlist L,Elemtype e); //(3)向顺序表的第i个元素前插入元素e; status ListInsert(Sqlist &L,int i,Elemtype e); //(4)输出顺序表中的元素; void PrintList(Sqlist L); //(5)删除顺序表中的第i个元素; status ListDelete(Sqlist &L,int i,Elemtype &e); //(6)取出顺序表中的第i个元素; status GetElem(Sqlist L,int i, Elemtype &e); //(7)求出元素的前驱 ; status PriorElem(Sqlist L,Elemtype cur_e,Elemtype &pre); /********************************************************/ //以上为顺序表的基本操作定义 /*******************************************************/ //(1)顺序表的初始化定义; status InitList(Sqlist &L) { // TODO (#1#): 创建空表 L.length=0; return OK; } //(2)顺序表的查找操作,成功就返回找到元素的位序,否则返回0; int LocateElem(Sqlist L,Elemtype e) { // TODO (#2#): 在顺序表中查找元素 //找到e在顺序表中的位序 ,即查找成功 //若e不存在于顺序表中,即查找失败 int i = 1; while (( i<=L.length)&&(L.elem[i-1] !=e)) ++i; if (i <= L.length) return i; else return 0; } //(3)向顺序表的第i个元素前插入元素e; //注意此时从最后一个元素到第i个元素都要顺次后移。 status ListInsert(Sqlist &L,int i,Elemtype e) { // TODO (#3#): 向表中插入元素 //插入位置合法作插入操作 //从最后一个元素开始移动元素,空出插入位置 //待插入元素作插入操作 //顺序表长度增加 if (i<1 i="">L.length+1||L.length==MAXSIZE) return ERROR; // 插入位置不合法 for ( int j= L.length ; j>=i ; j-- ) L.elem[j]=L.elem[j-1]; // 插入位置及之后的元素右移 L.elem[i-1] = e ; // 插入e ++L.length; // 表长增1 return OK; } //(4)输出顺序表中的元素; void PrintList(Sqlist L) { // TODO (#4#): 输出顺序表中的元素 for(int i=0;i<L.length;i++) { printf("%5d",L.elem[i]); } } //(5)删除顺序表中的第i个元素; status ListDelete(Sqlist &L,int i,Elemtype &e) { // TODO (#5#): //删除位置合法作删除操作 //删除元素之前保存被删除的元素 //从i+1个元素开始移动元素做删除操作,此时注意移动的方向 //顺序表的长度减少 if(L.length==0 || i<1 i="">L.length) return ERROR; e=L.elem[i-1]; //取第i个元素赋值给e for (int j=i; j<L.length; j++) L.elem[j-1]=L.elem[j]; L.length--; return OK; } //(6)取出顺序表中的第i个元素; status GetElem(Sqlist L,int i, Elemtype &e) { // TODO if (i<=0 || i>L.length) return ERROR; else{ e=L.elem[i-1]; return OK; } } //(7)求出元素的前驱 ; status PriorElem(Sqlist L,Elemtype cur_e,Elemtype &pre) { // TODO (#7#): //第一个数据元素没有前驱 int i = 1; // i 的初值为第 1 元素的位序 while ((i>1) && (i<=L.length) && (L.elem[i-1] !=cur_e)) ++i; if ((i > 1) && (i <= L.length)) { pre=L.elem[i-2]; return OK; } else return 0; } </1></1>