AC代码:
#include<iostream> using namespace std; typedef struct{ int *e,length; }node; int InitList_Sq(node &L){ L.e = new int[100]; if(!L.e) return 0; L.length = 0; return 1; } int LocateElem_Sq(node L, int e){ for(int i = 0; i < L.length; i++) if(L.e[i] == e) return i + 1; return 0; } int ListInsert_Sq(node &L,int a,int b){ if(a < 1 || a > L.length + 1 || L.length == 100) return 0; for(int i = L.length - 1; i >= a - 1; i--) L.e[i + 1] = L.e[i]; L.e[a - 1] = b; L.length++; return 1; } int ListDelete_Sq(node &L,int c,int &res){ if(c < 1 || c > L.length) return 0; res = L.e[c - 1]; for(int i = c - 1; i < L.length - 1; i++) L.e[i] = L.e[i + 1]; L.length--; return 1; } int sc1(node &L,int a,int &b){ int nl = 0; int ok = 0; for(int i = 0; i < L.length; i++){ while(L.e[i + nl] == a) b = i + nl + 1,nl++,ok = 1; L.e[i] = L.e[i + nl]; } L.length -= nl; return ok; } int sc2(node &L,int a,int b){ int nl = L.length - 1,ok = 0; for(int i = 0; i <= nl; i++){ while(L.e[i] == a) L.e[i] = L.e[nl],nl--,b = i,ok = 1; } L.length = nl + 1; return ok; } int main() { cout<< "1. 建立顺序表\n"; cout<< "2. 输入数据\n"; cout<< "3. 查找\n"; cout<< "4. 插入\n"; cout<< "5. 删除\n"; cout<< "6. 输出数据\n"; cout<< "7. 求最大数\n"; cout<< "8. 删除指定数 1(不会改变顺序表顺序)\n"; cout<< "9. 删除制定数 2(会改变顺序表顺序)\n"; cout<< "0. 退出\n\n"; int a = 1; node L; while(a){ cout<<"请选择:"; cin >> a; switch(a){ case 1 : if(InitList_Sq(L)) //创建顺序表 cout<<"成功建立顺序表\n\n"; else cout<<"顺序表建立失败\n\n"; break; case 2 : cout<<"请输入10个数:\n"; for(int i = 0; i < 10; i++) cin >> L.e[i]; L.length = 10; cout << endl; break; case 3 :{ cout<<"请输入所要查找的数:"; cin>> a; int b = LocateElem_Sq(L,a); if(b) cout<<a<<" 是第 "<<b<<"个数.\n\n"; else cout<<"查找失败!没有这样的数\n\n"; break; } case 4 : cout<<"请输入两个数,分别代表插入的位置和插入数值:"; int a,b;cin>>a>>b; //输入a和b,a代表插入的位置,b代表插入的数值 if(ListInsert_Sq(L,a,b)) cout<<"插入成功.\n\n"; else cout<<"I插入失败.\n\n"; break; case 5 : cout<<"请输入所要删除的数:"; int c,res; cin>> c; //输入c,代表要删除数的位置 if(ListDelete_Sq(L,c,res)) cout<<"删除成功.\n被删除的数是:"<<res<<endl<<endl; else cout<<"删除失败.\n\n"; break; case 6: //顺序表的输出 cout<<"当前顺序表为:\n"; for(int i=0;i<L.length;i++) cout<<L.e[i]<<" "; cout<<endl<<endl; break; case 7:{ int ans = 0; for(int i = 0; i < L.length; i++) if(L.e[i] > ans) ans = L.e[i]; cout << "最大数为 :" << ans << endl; break; } case 8: cout << "请输入要删除的数\n"; cin >> a; if(sc1(L,a,b)) cout << "删除成功,删除的数在第 " << b << " 个位置\n"; else cout << "删除失败\n"; cout << endl; break; case 9 : cout << "请输入要删除的数\n"; cin >> a; if(sc1(L,a,b)) cout << "删除成功,删除的数在第 " << b << " 个位置\n"; else cout << "删除失败\n"; cout << endl; break; } } return 0; }