數據結構-順序表基本操作的實現(含全部代碼)
版權聲明:轉載請注明出處,並附有原文鏈接。謝謝:) https://blog.csdn.net/lady_killer9/article/details/82695770
今天起開始編寫數據結構中的各種數據結構及其算法的實現。
主要依據嚴蔚敏版數據結構教材以及王道數據結構考研輔導書。
今天是線性表中的順序表的實現,主要實現函數如下,讀者有需要可以評論,我可以適當加幾個。
- CreatList(SqList &L,int n) 參數:順序表L,順序表長度n 功能:創建長度為的順序表 時間復雜度:O(n)
- InitList(SqList &L) 參數:順序表L 功能:初始化
- InsertList(SqList &L,int i,ElemType e) 參數:順序表L,位置i,元素e 功能:位置i處插入元素e
- ListDelete(SqList &L,int i) 參數:順序表L,位置i 功能:刪除位置i處元素
- LocateElem(SqList L,ElemType e) 參數:順序表L,元素e 功能:返回第一個等於e的元素的位置
- PrintList(SqList L) 參數:順序表L 功能:遍歷L,並輸出
代碼如下:
/* Project: sequence_list(數據結構-順序表) Date: 2018/09/12 Author: Frank Yu CreatList(SqList &L,int n) 參數:順序表L,順序表長度n 功能:創建長度為的順序表 時間復雜度:O(n) InitList(SqList &L) 參數:順序表L 功能:初始化 時間復雜度:O(1) InsertList(SqList &L,int i,ElemType e) 參數:順序表L,位置i,元素e 功能:位置i處插入元素e 時間復雜度:O(n) ListDelete(SqList &L,int i) 參數:順序表L,位置i 功能:刪除位置i處元素 時間復雜度:O(n) LocateElem(SqList L,ElemType e) 參數:順序表L,元素e 功能:返回第一個等於e的元素的位置 時間復雜度:O(n) PrintList(SqList L) 參數:順序表L 功能:遍歷L,並輸出 */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> #define MaxSize 100 #define ElemType int #define Status int using namespace std; //順序表數據結構 typedef struct { ElemType data[MaxSize];//順序表元素 int length; //順序表當前長度 }SqList; //***************************基本操作函數*******************************// //初始化順序表函數,構造一個空的順序表 Status InitList(SqList &L) { memset(L.data,0,sizeof(L));//初始化數據為0 L.length=0; //初始化長度為0 return 0; } //創建順序表函數 初始化前n個數據 bool CreatList(SqList &L,int n) { if(n<0||n>MaxSize)false;//n非法 for(int i=0;i<n;i++) { scanf("%d",&L.data[i]); L.length++; } return true; } //插入函數 位置i插入數據 i及之后元素后移 1=<i<=length+1 bool InsertList(SqList &L,int i,ElemType e) { if(i<1||i>L.length+1) //判斷位置是否有效 { printf("位置無效!!!\n"); return false; } if(L.length>=MaxSize)//判斷存儲空間是否已滿 { printf("當前存儲空間已滿!!!\n"); return false; } for(int j=L.length;j>=i;j--)//位置i及之后元素后移 { L.data[j]=L.data[j-1]; } L.data[i-1]=e; L.length++; return true; } //刪除函數 刪除位置i的元素 i之后的元素依次前移 bool ListDelete(SqList &L,int i) { if(i<1||i>L.length) { printf("位置無效!!!\n"); return false; } for(int j=i;j<=L.length-1;j++)//位置i之后元素依次前移覆蓋 { L.data[j-1]=L.data[j]; } L.length--; return true; } //查找函數 按位置從小到大查找第一個值等於e的元素 並返回位置 int LocateElem(SqList L,ElemType e) { for(int i=0;i<L.length;i++)//從低位置查找 { if(L.data[i]==e) return i+1; } return 0; } //********************************功能函數*****************************************// //輸出功能函數 按位置從小到大輸出順序表所有元素 void PrintList(SqList L) { printf("當前順序表所有元素:"); for(int i=0;i<L.length;i++) { printf("%d ",L.data[i]); } printf("\n"); } //創建順序表函數 void Create(SqList &L) { int n;bool flag; printf("請輸入要創建的順序表長度(>1):"); scanf("%d",&n); printf("請輸入%d個數(空格隔開):",n); flag=CreatList(L,n); if(flag){ printf("創建成功!\n"); PrintList(L); } else printf("輸入長度非法!\n"); } //插入功能函數 調用InsertList完成順序表元素插入 調用PrintList函數顯示插入成功后的結果 void Insert(SqList &L) { int place;ElemType e;bool flag; printf("請輸入要插入的位置(從1開始)及元素:\n"); scanf("%d%d",&place,&e); flag=InsertList(L,place,e); if(flag) { printf("插入成功!!!\n"); PrintList(L); } } //刪除功能函數 調用ListDelete函數完成順序表的刪除 調用PrintList函數顯示插入成功后的結果 void Delete(SqList &L) { int place;bool flag; printf("請輸入要刪除的位置(從1開始):\n"); scanf("%d",&place); flag=ListDelete(L,place); if(flag) { printf("刪除成功!!!\n"); PrintList(L); } } //查找功能函數 調用LocateElem查找元素 void Search(SqList L) { ElemType e;int flag; printf("請輸入要查找的值:\n"); scanf("%d",&e); flag=LocateElem(L,e); if(flag) { printf("該元素位置為:%d\n",flag); } else printf("未找到該元素!\n"); } //菜單 void menu() { printf("********1.創建 2.插入*********\n"); printf("********3.刪除 4.查找*********\n"); printf("********5.輸出 6.退出*********\n"); } int main() { SqList L;int choice; InitList(L); while(1) { menu(); printf("請輸入菜單序號:\n"); scanf("%d",&choice); if(6==choice) break; switch(choice) { case 1:Create(L);break; case 2:Insert(L);break; case 3:Delete(L);break; case 4:Search(L);break; case 5:PrintList(L);break; default:printf("輸入錯誤!!!\n"); } } return 0; }
結果截圖:
插入結果截圖

刪除結果截圖

查找結果截圖

輸出結果截圖
2018-09-18更新 添加創建函數 菜單有改動
更多數據結構與算法的實現:數據結構(嚴蔚敏版)與算法的實現(含全部代碼)
有問題請下方評論,轉載請注明出處,並附有原文鏈接,謝謝!如有侵權,請及時聯系。