线性表_顺序表的基本操作
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N = 1000000 + 5; #define MaxSize 50 typedef struct{ int data[MaxSize]; int length; }SqList; //********************基础操作函数******************// //初始化顺序表函数,构造一个空的顺序表 void InitList(SqList &L){ memset(L.data,0,sizeof(L)); L.length = 0; return ; } //创建顺序表函数,初始化钱n个数据 bool CreateList(SqList &L,int n){ if(n < 0 || n > MaxSize) return false; for(int i = 0;i < n;i++){ scanf("%d",&L.data[i]); L.length++; } return true; } //插入函数 bool ListInsert(SqList &L,int i,int e){ if(i < 1 && i > L.length + 1) return false; if(L.length >=MaxSize) return false; for(int j = L.length;j>=i;j--) L.data[j] = L.data[j-1]; L.data[i-1] = e; L.length++; return e; } //删除函数 bool ListDelete(SqList &L,int i, int &e){ if(i<1||i>L.length) return false; e = L.data[i-1]; for(int j = i;j < L.length;j++) L.data[j-1] = L.data[j]; L.length--; return true; } //查找函数 int LocateElem(SqList L,int e){ for(int i = 0;i<L.length;i++) if(L.data[i]==e) return i+1; return 0; } //倒置函数 void Reverse(SqList &L){ if(L.length){ for(int i = 0;i < L.length-1-i;i++){ int temp = L.data[i]; L.data[i] = L.data[L.length-1-i]; L.data[L.length-1-i] = temp; } } } //奇偶分开排序函数 void SplitSort(SqList &L){ int Even = 0,Odd = L.length-1; int i = 0, j= L.length-1; bool flag = false; if(L.length){ for(;i < j;i++,j--){ while(L.data[i]%2!=0&&i<L.length-1) i++; while(L.data[j]%2==0&&j>0) j--; if(L.data[i]%2==0&&L.data[j]%2!=0){ int temp =L.data[i]; L.data[i]= L.data[j]; L.data[j]= temp; flag = true; } if(!flag){ if(i>j){ Even = j; Odd = i; } else{ Even = L.length-1; Odd = 0; } } } if(flag){ for(int i = 0;i <L.length;i++){ if(L.data[i]%2==0){ Odd = i; Even = i - 1; break; } } } } sort(L.data,L.data+Even+1); sort(L.data+Odd,L.data+L.length); } //清空顺序表 void ClearList(SqList &L){ L.length = 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; L.length = 0; printf("请输入要创建的顺序表长度(>1):"); scanf("%d",&n); printf("请输入%d个数(空格隔开):",n); flag = CreateList(L,n); if(flag){ printf("创建成功!\n"); PrintList(L); } else{ printf("输入长度非法!\n"); } } //插入功能函数 void Insert(SqList &L){ int place; int e;int flag; printf("请输入要插入的位置(从1开始)及元素:\n"); scanf("%d %d",&place,&e); flag = ListInsert(L,place,e); if(flag){ printf("插入成功!\n"); PrintList(L); } } void Delete(SqList &L){ int place;bool flag; printf("请输入要删除的位置(从1开始):\n"); scanf("%d,&place"); if(flag){ printf("删除成功!\n"); PrintList(L); } } //查找功能函数 void Search(SqList L){ int e;bool 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"); printf("********7.输出 8.清空*********\n"); printf("********9.退出 *********\n"); } int main() { SqList L; int choice; InitList(L); while (1){ menu(); printf("请输入菜单序号:\n"); scanf("%d", &choice); if (9 == 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:Reverse(L); break; case 6:SplitSort(L); break; case 7:PrintList(L); break; case 8:ClearList(L); break; default:printf("输入错误!!!\n"); } } return 0; }