日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序表的查找,插入和删除

發布時間:2024/1/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序表的查找,插入和删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、順序表的定義:

#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100//順序表可能達到最大長度 #define OVERFLOW 0//設OVERFLOW的值為0; #define OK 1//返回值為1; #define ERROR 0//返回值為0; typedef int Status; typedef struct {int *elem;//存儲當前空間基地址int length;//當前長度 }SqList;//順序表的結構類型為SqList

二.initList(初始化)

?初始化目的:
?1.為順序表L動態分配一個預定大小的數組空間,
?使elem指向這段空間的基地址;
?2.將表的當前長度設為0;

Status initList(SqList &L) {//構建一個空的順序表LL.elem=(int *)malloc( MAXSIZE*sizeof(int));//為順序表分配一個大小為MAXSIZE的數組空間if(!L.elem)exit(OVERFLOW);//存儲分配失敗退出L.length=0;//空表長度為0return OK; }

三.LocateElem(查找)

算法步驟:
1.從第一個元素起,依次將其值和e相比較,若找到值與e相等的元素L.elem[i],則查找成功,
返回該序號i+1;
2.若查找整個順序表沒有找到,則查找失敗,返回0;

Status LocateElem(SqList L,int e) {//在順序表L中查找值為e的數據元素。返回其序號for(int i=0;i<L.length;i++)if(L.elem[i]==e) return i+1;//查找成功,返回序號i+1return 0;//查找失敗,返回0; }

四.ListInsert(插入)

算法步驟:
1.判斷插入位置i是否合法(i值合法范圍為1<=i<=n+1),若不合法返回ERROR
2.判斷順序表存儲空間是否已滿,若滿返回ERROR
3.將第n個至第i個位置的元素依次向后移動一個位置,空出第i個位置(i=n+1時無須移動)
4.將要插入的新元素e放入第i個位置
5.表長+1;

Status ListInsert(SqList &L,int i,int e) {//在順序表L中第i個位置插入新的元素e,i值的合法范圍是1<=i<=L.length+1if((i<1)||(i>L.length+1)) return ERROR;//i值不合法if(L.length==MAXSIZE) return ERROR;//當前存儲空間已滿for(int j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j];//插入及之后的元素后移L.elem[i-1]=e;//將新元素e放入第i個位置++L.length;//表長+1;return OK; }

五.ListDelete(刪除)

算法步驟:

1.判斷刪除位置i是否合法(合法值為1<=i<=n),若不合法則返回ERROR;
2.將第i+1個至第n個元素依次向前移動一個位置(i=n時無須移動);
3.表長減1;

Status ListDelete(SqList &L,int i) {//在順序表L中刪除第i個元素,i值的合法范圍是1<=i<=L.lengthif(i<1||(i>L.length-1)) return ERROR;//i值不合法for(int j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j];//被刪除元素之后的元素前移--L.length;//表長減1;return OK; }

六、打印:

void print(SqList &L) {//打印int i;for(i=0;i<=L.length-1;i++)printf("%d\n",L.elem[i]);//遍歷printf("----------\n"); }

七、主函數:

int main() {SqList L;initList(L);//構建空的順序表L.elem[0]=10;L.elem[1]=20;L.elem[2]=30;L.elem[3]=40;L.length=4;print(L);//打印ListInsert(L,3,1000);//在順序表L中第3個位置插入1000print(L);ListDelete(L,1);//在順序表L中刪除第1個元素print(L);printf("%d\n",LocateElem(L,20));//在順序表L中查找值為20的數據元素位置return 1; }

八、完整代碼:

#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100//順序表可能達到最大長度 #define OVERFLOW 0//設OVERFLOW的值為0; #define OK 1//返回值為1; #define ERROR 0//返回值為0; typedef int Status; typedef struct {int *elem;//存儲當前空間基地址int length;//當前長度 }SqList;//順序表的結構類型為SqList Status initList(SqList &L) {//構建一個空的順序表LL.elem=(int *)malloc( MAXSIZE*sizeof(int));//為順序表分配一個大小為MAXSIZE的數組空間if(!L.elem)exit(OVERFLOW);//存儲分配失敗退出L.length=0;//空表長度為0return OK; } Status LocateElem(SqList L,int e) {//在順序表L中查找值為e的數據元素。返回其序號for(int i=0;i<L.length;i++)if(L.elem[i]==e) return i+1;//查找成功,返回序號i+1return 0;//查找失敗,返回0; }Status ListInsert(SqList &L,int i,int e) {//在順序表L中第i個位置插入新的元素e,i值的合法范圍是1<=i<=L.length+1if((i<1)||(i>L.length+1)) return ERROR;//i值不合法if(L.length==MAXSIZE) return ERROR;//當前存儲空間已滿for(int j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j];//插入及之后的元素后移L.elem[i-1]=e;//將新元素e放入第i個位置++L.length;//表長+1;return OK; }Status ListDelete(SqList &L,int i) {//在順序表L中刪除第i個元素,i值的合法范圍是1<=i<=L.lengthif(i<1||(i>L.length-1)) return ERROR;//i值不合法for(int j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j];//被刪除元素之后的元素前移--L.length;//表長減1;return OK; }void print(SqList &L) {//打印int i;for(i=0;i<=L.length-1;i++)printf("%d\n",L.elem[i]);//遍歷printf("----------\n"); } int main() {SqList L;initList(L);//構建空的順序表L.elem[0]=10;L.elem[1]=20;L.elem[2]=30;L.elem[3]=40;L.length=4;print(L);//打印ListInsert(L,3,1000);//在順序表L中第3個位置插入1000print(L);ListDelete(L,1);//在順序表L中刪除第1個元素print(L);printf("%d\n",LocateElem(L,20));//在順序表L中查找值為20的數據元素位置return 1; }

九、實現:

?

總結

以上是生活随笔為你收集整理的顺序表的查找,插入和删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。