一、題目簡介
實現順序表的創建、初始化、賦值、插入、刪除、按數據查找元素位置、按元素位置查找數據、清空、刪除
的操作,以上操作用可用菜單選項完成
二、源程序代碼
#include<iostream> #define MAXSIZE 100 using namespace std; typedef int ElemType; typedef struct List { ElemType *elem; int length; }Sqlist; void InitList(Sqlist &L); void DestroyList(Sqlist &L); void ClearList(Sqlist &L); void GetLength(Sqlist L); void isEmpty(Sqlist L); void Getelem(Sqlist &L,int i); void Locateelem(Sqlist &L,ElemType e); void ListInsert(Sqlist &L,int i,ElemType e); void ListDelete(Sqlist &L,int i); void fuzhi(Sqlist &L); void print(Sqlist &L); void mainscreen(); int main() { mainscreen(); return 0; } void InitList(Sqlist &L) { L.elem=new ElemType[MAXSIZE]; if(!L.elem){ cout<<"內存空間分配失敗"<<endl; } L.length=0; cout<<"順序表初始化成功"<<endl; } void mainscreen() { int flag=0; while(flag==0) { cout<<"請選擇對順序表的操作"<<endl; cout<<"\t1 初始化順序表"<<endl; cout<<"\t2 給順序表賦值"<<endl; cout<<"\t3 向順序表中插入數據元素"<<endl; cout<<"\t4 向順序表中刪除數據元素"<<endl; cout<<"\t5 清空順序表"<<endl; cout<<"\t6 刪除順序表"<<endl; cout<<"\t7 根據數據元素查詢在順序表中位置"<<endl; cout<<"\t8 根據在順序表中位置查詢數據元素"<<endl; cout<<"\t9 查詢順序表長度"<<endl; cout<<"\t10 輸出順序表"<<endl; cout<<"\t11 退出操作"<<endl; int s; cin>>s; if(1<=s<=10) { switch(s) { case 1: Sqlist L; InitList(L); break; case 2: fuzhi(L); break; case 3: int a; ElemType e; cout<<"請輸入你要插入的數據元素位置"<<endl; cin>>a; cout<<"請輸入你要插入的數據元素"<<endl; cin>>e; ListInsert(L,a,e); break; case 4: int b; cout<<"請輸入你要刪除的數據元素位置"<<endl; cin>>b; ListDelete(L,b); break; case 5: ClearList(L); break; case 6: DestroyList(L); break; case 7: ElemType f; cout<<"請輸入你要查找的數據元素"<<endl; cin>>f; Locateelem(L,f); break; case 8: int c; cout<<"請輸入你要查找的數據元素的位置"<<endl; cin>>c; Getelem(L,c); break; case 9: GetLength(L); break; case 10: print(L); break; case 11: flag=1; cout<<"已成功退出對順序表的操作"<<endl; exit(0); break; } } } } void DestroyList(Sqlist &L) { if(L.elem) { delete[] L.elem; cout<<"順序表刪除成功"<<endl; } else{ cout<<"順序表刪除失敗"<<endl; } } void ClearList(Sqlist &L) { L.length=0; cout<<"順序表清空成功"<<endl; } void GetLength(Sqlist L) { cout<<"順序表中有"<<L.length<<"個元素"<<endl; } void isEmpty(Sqlist L) { if(L.length==0) cout<<"順序表為空"<<endl; else cout<<"順序表不為空"<<endl; } void Getelem(Sqlist &L,int i) { ElemType e; if(i<1||i>L.length){ cout<<"輸入的查找參數錯誤"<<endl; } else{ e=L.elem[i-1]; cout<<"查找成功"<<endl; cout<<"順序表中第"<<i<<"個數據元素是"<<e<<endl; } } void Locateelem(Sqlist &L,ElemType e) { int i=0; int flag=0; for(i=0;i<L.length;i++) { if(L.elem[i]==e){ cout<<"查找成功"<<endl; cout<<e<<"位於順序表中第"<<i+1<<"個數據元素"<<endl; flag=1; } } if(flag==0) cout<<"查找失敗"<<endl; } void ListInsert(Sqlist &L,int i,ElemType e) { int j=0; if(i<1||i>L.length) { cout<<"輸入的查找參數錯誤"<<endl; } if(L.length==MAXSIZE) { cout<<"當前儲存空間已滿,無法插入"<<endl; } for(j=L.length-1;j>=i-1;j--) { L.elem[j+1]=L.elem[j]; } L.elem[i-1]=e; ++L.length; cout<<"插入順序表中第"<<i<<"個數據元素成功"<<endl; } void ListDelete(Sqlist &L,int i) { int j=0; if(i<1||i>L.length) { cout<<"輸入的查找參數錯誤"<<endl; } for(j=i;j<=L.length-1;j++) { L.elem[j-1]=L.elem[j]; } --L.length; cout<<"刪除順序表中第"<<i<<"個數據元素成功"<<endl; } void fuzhi(Sqlist &L) { int n,m; cout<<"請輸入賦值的數據元素個數"<<endl; cin>>n; for(int i=0;i<n;i++) { cout<<"請輸入第"<<i+1<<"的數據元素的值"<<endl; cin>>m; L.elem[i]=m; L.length++; } cout<<"賦值成功"<<endl; } void print(Sqlist &L) { for(int i=0;i<L.length;i++) { cout<<"第"<<i+1<<"的數據元素的值:"; cout<<L.elem[i]<<endl; } cout<<"順序表輸出完成"<<endl; }