#include<iostream.h>
#include<stdlib.h>
#define max 20
typedef struct{//储存结构
int key;
char other;
}elemtype;
typedef struct{
elemtype *elem;
int length;
}sqlist;
void init(sqlist &L)//初始化
{
L.elem=new elemtype[max+1];
L.length=0;
}
bool empty(sqlist L)//判空
{
if(L.length==0)
return true;
else
return false;
}
void print1(sqlist L)//输出
{
for (int i=1;i<=L.length;i++)
cout<<L.elem[i].key<<" ";
cout<<endl;
}
int length(sqlist L)//判断表长
{
return(L.length);
}
int delet(sqlist &L,int i)//删除
{
if((i<1)||i>L.length) return 0;
for(i;i<=L.length-1;i++)
L.elem[i]=L.elem[i+1];
--L.length;
return 1;
}
int insert(sqlist &L,int i,elemtype e)//插入
{
int j;
if((i<1)||i>L.length+1) return 0;
if(L.length==max)return 0;
++L.length;
for(j=L.length;j>i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i]=e;
return 1;
}
elemtype get(sqlist L,int i)//读取
{
if(i>0&&i<=L.length)return L.elem[i];
else
{cout<<"i不合理"<<endl;
exit(-2);
}
}
int locate(sqlist L,elemtype e)//查找
{
for(int i=1;i<=L.length;i++)
if(L.elem[i].key==e.key)return i;
return 0;
}
void InsertSort(sqlist &L)//对顺序表L做直接插入排序
{
int i,j;
for(i=2;i<=L.length;++i)
if(L.elem[i].key<L.elem[i-1].key)
{
L.elem[0]=L.elem[i];
L.elem[i]=L.elem[i-1];
for(j=i-2; L.elem[0].key<L.elem[j].key;--j)
L.elem[j+1]=L.elem[j];
L.elem[j+1]=L.elem[0];
}
}
void BubbleSort(sqlist &L) //对顺序表L做冒泡排序
{
int m,j,flag;
elemtype t;
m=L.length-1; flag=1;
while((m>0)&&(flag==1))
{
flag=0;
for(j=1;j<=m;j++)
if(L.elem[j].key>L.elem[j+1].key)
{
flag=1;
t=L.elem[j];L.elem[j]=L.elem[j+1];L.elem[j+1]=t;
}
--m;
}
}
void SelectSort(sqlist &L) //对顺序表L做简单选择排序
{
int i,j,k;
elemtype t;
for(i=1;i<L.length;++i)
{
k=i;
for(j=i+1;j<=L.length;++j)
if(L.elem[j].key<L.elem[k].key) k=j;
if(k!=i) {t=L.elem[i];L.elem[i]=L.elem[k];L.elem[k]=t;}
}
}
void clear(sqlist &L)//清空
{
L.length=0;
}
void destroy(sqlist &L)//销毁
{
if(L.elem) delete[] L.elem;
L.elem=NULL;
L.length=0;
}
void main()
{
sqlist mylist;
init(mylist);
elemtype e;
cout<<"20-8软工2-9-115"<<endl;
if(empty(mylist))cout<<"初始化为空表"<<endl;
cout<<"请规定length,条件是不大于"<<max<<endl;
int n;
cin>>n;
while(n>max)
{
cout<<"个数超过上限,不能超过"<<max<<",请重新输入"<<endl;
cin>>n;
}
cout<<"请输入"<<endl;
for(int i=1;i<=n;i++)
{
cin>>mylist.elem[i].key;
mylist.length++;
}
print1(mylist);
cout<<"表长为"<<length(mylist)<<endl;
cout<<" 请选择要进行的操作 \n"<<endl;
cout<<"********************************************************\n"<<endl;
cout<<"* 1-----删除 *\n"<<endl;
cout<<"* 2-----插入 *\n"<<endl;
cout<<"* 3-----读取 *\n"<<endl;
cout<<"* 4-----查找 *\n"<<endl;
cout<<"* 5-----直接插入排序 *\n"<<endl;
cout<<"* 6-----冒泡排序 *\n"<<endl;
cout<<"* 7-----简单选择排序 *\n"<<endl;
cout<<"* 8-----退出 *\n"<<endl;
int j;
bool b=true;
while(b){
cout<<"\n请继续选择将要进行的操作的号码:\n";
cin>>j;
switch(j)
{
case 1: cout<<"删除第几个?";
cin>>i;
delet(mylist,i);
cout<<"现在表为";
print1(mylist);break;
case 2: cout<<"第几个位置插入?";
cin>>i;
cout<<"插入的元素为?";
cin>>e.key;
insert(mylist,i,e);cout<<"现在表为";
print1(mylist);break;
case 3: cout<<"读取第几个?";
cin>>i;
cout<<get(mylist,i).key<<endl;break;
case 4:cout<<"查找什么元素?";
cin>>e.key;
i=locate(mylist,e);
if(i!=0)cout<<"位序为"<<i<<endl;
else cout<<"不存在"<<endl;
break;
case 5:InsertSort(mylist);
cout<<"排序后"<<endl;print1(mylist);break;
case 6:BubbleSort(mylist);
cout<<"排序后"<<endl;print1(mylist);break;
case 7:SelectSort(mylist);
cout<<"排序后"<<endl;print1(mylist);break;
case 8: b=false;break;
}
}
clear(mylist);
cout<<"清空后,表长为:"<<length(mylist)<<endl;
destroy(mylist);
}