順序表的查找、插入、刪除、合并操作,用c++實(shí)現(xiàn)相關(guān)代碼:
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、細(xì)河ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的細(xì)河網(wǎng)站制作公司#include
using namespace std;
//定義線性表順序存儲結(jié)構(gòu)
#define MAXSIZE 100 //線性表大長度
typedef struct
{
//線性表占用數(shù)組空間
int elem[MAXSIZE];
//記錄線性表中最后一個元素在數(shù)組elem[]中的位置(下標(biāo)值),空表置為-1
int last;
}SeqList;
//順序表的按內(nèi)容查找運(yùn)算
//在順序表L中查找與e相等的元素,若L.elem[i]=e,則找到該元素,并返回i+1,若找不到,則返回-1
int Locate(SeqList L, int e)
{
//i為掃描計數(shù)器,初值為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;//若沒找到,則返回空序號
}
}
//順序表的插入運(yùn)算
#define OK 1
#define ERROR 0
//在順序表L中第i個數(shù)據(jù)元素之前插入一個元素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);
}
//順序表的刪除運(yùn)算
//在順序表L中刪除第i個數(shù)據(jù)元素,并用指針參數(shù)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也是非遞減有序排列。
解:算法如下:
//線性表的合并運(yùn)算
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)//當(dāng)表LA有剩余元素時,則將表LA的剩余元素賦給表LC
{
LC->elem[k] = LA->elem[i];
i++;
k++;
}
while (j <= LB->last)//當(dāng)表LB有剩余元素時,則將表LB的剩余元素賦給表LC
{
LC->elem[k] = LB->elem[j];
j++;
k++;
}
LC->last = LA->last + LB->last + 1;
}
順序表的優(yōu)點(diǎn):1.無須為表示結(jié)點(diǎn)間的邏輯關(guān)系而增加額外的存儲空間;
2.可方便隨機(jī)存取表中任一元素。
缺點(diǎn):1.插入或刪除運(yùn)算不方便;
2.由于順序表要占用連續(xù)的存儲空間,存儲分配只能預(yù)先進(jìn)行靜態(tài)分配,當(dāng)表長變化較大時,難以確定合適的存儲規(guī)模。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。