顺序表的查找,插入和删除
生活随笔
收集整理的這篇文章主要介紹了
顺序表的查找,插入和删除
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、順序表的定義:
#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;
三.LocateElem(查找)
算法步驟:
1.從第一個元素起,依次將其值和e相比較,若找到值與e相等的元素L.elem[i],則查找成功,
返回該序號i+1;
2.若查找整個順序表沒有找到,則查找失敗,返回0;
四.ListInsert(插入)
算法步驟:
1.判斷插入位置i是否合法(i值合法范圍為1<=i<=n+1),若不合法返回ERROR
2.判斷順序表存儲空間是否已滿,若滿返回ERROR
3.將第n個至第i個位置的元素依次向后移動一個位置,空出第i個位置(i=n+1時無須移動)
4.將要插入的新元素e放入第i個位置
5.表長+1;
五.ListDelete(刪除)
算法步驟:
1.判斷刪除位置i是否合法(合法值為1<=i<=n),若不合法則返回ERROR;
2.將第i+1個至第n個元素依次向前移動一個位置(i=n時無須移動);
3.表長減1;
六、打印:
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; }九、實現:
?
總結
以上是生活随笔為你收集整理的顺序表的查找,插入和删除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ModelSim 相关实用设置
- 下一篇: Total Recorder Profe