//顺序表的定义 #define MAXSIZE 100 //此处定义线性表可能打到的最大长度 typedef struct { ElemType elem[MAXSIZE];//线性表占用的数组空间 int last;//记录线性表中最后一个元素在elem[]中的位置 }SeqList;
//查找 //1、按下标 相当于L.elem[i-1] //2、按值查找 int Locate(SqList L, ElemType e) { i = 0;//i为扫描的计数器,初值为0,即从第一个元素开始比较 while(i<=L.last&&L.elem[i]!=e) i++; if(i<=L.last) return(i+1); else return(-1);//若没有找到,则返回空序号 }
#插入操作 #define OK 1 #define ERROR 0 int InsList(SeqList L, int i,ElemType e) { if(i<1&&i>L.last+2)//i为插入位置序号1,2...n return ERROR; if(L->last>=MAXSIZE-1) { printf("表已满,无法插入 "); return ERROR; } for(k=L->last;k>=i-1;k--) L->elem[k+1]=L->elem[k]; L->elem[i-1] = e; L->last++; return OK; }
#删除操作 int DelList(SeqList L, int i, ElemType *e) { if(i<1&&i>L.last+1) return ERROR; *e=L->elem[i-1]; for(int j=i;j<=L.last;j++)#注意 { L.elem[i-1]=L.elem[i] } L.last--; return OK; }
/*********************有序表合并***********************/ /*有两个顺序表LA和LB,其元素均为递增有序排列,编写一个算法,将它们合并成一个递增有序表LC*/ int merge(Sqlist LA, Sqlist LB, Sqlist *LC) { int i,j; i=0,j=0; while(i<=LA.last&&j<=LB.last) { if(LA.elem[i]<=LB.elem[j]) LC.elem[++last]=LA.elem[i++]; else LC.elem[++last]=LB.elem[j++]; } while(i<=LA.last) LC.elem[++last]=LA.elem[i++]; while(j<=LB.last) LC.elem[++last]=LB.elem[j++]; return OK }