顺序表的查找、插入、删除、合并操作及其优缺点-创新互联-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

顺序表的查找、插入、删除、合并操作及其优缺点-创新互联

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

我们提供的服务有:成都网站设计、网站制作、微信公众号开发、网站优化、网站认证、细河ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的细河网站制作公司

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:顺序表的查找、插入、删除、合并操作及其优缺点-创新互联
文章起源:http://kswsj.cn/article/disegd.html

其他资讯