#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;
}