顺序表:
//查找运算
int Locate(SeqList L, ElemType e)
{
int i=0; // i为扫描计数器,初值为0,即从第一个元素开始比较
while ((i<=L.last)&&(L.elem[i]!=e))
//顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到
i++;
if (i<=L.last)
return(i+1); //若找到值为e的元素,则返回其序号
else
return(-1); //若没找到,则返回空序号 }
//插入运算
/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,
i的合法取值范围是 1≤i≤L->last+2 */
int InsList(SeqList *L,int i,ElemType e)//插入运算
{ int k;
if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/
{
printf("插入位置i值不合法");
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; /*在C语言数组中,第i个元素的下标为i-1*/
L->last++;
return(OK); }
//删除运算
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{ int k;
if((i<1)||(i>L->last+1))
{ printf("删除位置不合法!");
return(ERROR); }
*e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/
for(k=i; i<=L->last; k++)
L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/
L->last--;
return(OK); }
void merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
int i,j,k;
i=0;j=0;k=0;
while(i<=LA->last&&j<=LB->last)
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]= LA->elem[i];
i++;
k++;}
else
{
LC->elem[k]=LB->elem[j];
j++;