数据结构 顺序表

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

}

 

posted @ 2022-07-19 09:03  霖霖的信箱  阅读(149)  评论(0)    收藏  举报