顺序表的查找、插入、删除、合并操作,用c++实现相关代码:

#include

using namespace std;


//定义线性表顺序存储结构

#define MAXSIZE 100  //线性表最大长度

typedef struct

{

//线性表占用数组空间

int elem[MAXSIZE];

//记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1

int last;

}SeqList;



//顺序表的按内容查找运算

//在顺序表L中查找与e相等的元素,若L.elem[i]=e,则找到该元素,并返回i+1,若找不到,则返回-1

int  Locate(SeqList L, int e)

{

//i为扫描计数器,初值为0,即从第一个元素开始比较

int i = 0;

//顺序扫描表,直到找到值为e的元素或扫描到表尾而没有找到

while ((i<=L.last)&&(L.elem[i]!=e))

{

i++;

}

if (i <= L.last)

{

return (i + 1);//若找到值为e的元素,则返回其序号

}

else

{

return -1;//若没找到,则返回空序号

}

}


//顺序表的插入运算

#define OK 1

#define ERROR 0

//在顺序表L中第i个数据元素之前插入一个元素e,n个元素有n+1个插入位置,1<=i<=L->last + 2

int InsList(SeqList *L, int i, int e)

{

int k = 0;

if ((i<1) || (i>L->last + 2))//判断插入位置是否合法

{

cout << "插入位置i值不合法!" << endl;

return (ERROR);

}

if (L->last >= MAXSIZE - 1)

{

cout << "表已满,无法插入!" << endl;

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);

}


//顺序表的删除运算

//在顺序表L中删除第i个数据元素,并用指针参数e返回其值,1<=i<=L->last + 1

int DelList(SeqList *L, int i, int *e)

{

int k = 0;

if ((i<1) || (i>L->last + 1))//判断删除位置是否合法

{

cout << "删除位置不合法!" << endl;

return (ERROR);

}

*e = L->elem[i - 1];//将删除的元素存放到e所指向的变量中

for (k = i; k <= L->last; k++)//将后面的元素依次前移

{

L->elem[k - 1] = L->elem[k];

}

L->last--;

return (OK);

}

int main()

{

        //

system("pause");

return 0;

}

例:有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。

解:算法如下:

//线性表的合并运算

void MergeList(SeqList *LA, SeqList *LB, SeqList *LC)

{

int 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++;

k++;

}

}

while (i <= LA->last)//当表LA有剩余元素时,则将表LA的剩余元素赋给表LC

{

LC->elem[k] = LA->elem[i];

i++;

k++;

}

while (j <= LB->last)//当表LB有剩余元素时,则将表LB的剩余元素赋给表LC

{

LC->elem[k] = LB->elem[j];

j++;

k++;

}

LC->last = LA->last + LB->last + 1;

}


顺序表的优点:1.无须为表示结点间的逻辑关系而增加额外的存储空间; 

              2.可方便随机存取表中任一元素。

缺点:1.插入或删除运算不方便;

      2.由于顺序表要占用连续的存储空间,存储分配只能预先进行静态分配,当表长变化较大时,难以确定合适的存储规模。