顺序表的基本操作

   //顺序表的基本操作

#include<stdio.h>

typedef int ElemType;

typedef struct{

         ElemTypeelem[100];

   int length;

}SqList;

void print(SqListL)//-------------------------------------输出顺序表内的数据

{

int i;

         for(i=0;i<L.length;i++)

                   if(!i)printf("%d",L.elem[i]);

                   elseprintf(" %d",L.elem[i]);  

printf("\n");

}

void get(SqList L,int i)//--------------------------------取出表中第I个元素

{ if(i<0||i>L.length-1)

  printf("输入参数错误");

  else

  printf("表中第%d个元素是%d\n",i,L.elem[i-1]);

}

 void locate(SqList L,ElemType X)//---------------------------按值查找并返回在表中的位置

{ int i=0;

 /*while(i<L.length&&L.elem[i]!=X)

  {

 ++i;}

 if(i==L.length) return -1;

 else

  printf("%d\n",i+1);*/       //该算法木有监测数据表中重复数据的问题

  for(i=0;i<=L.length;i++)

  {

   if(L.elem[i]==X&&i<L.length)

     printf("%d\n",i+1);

if(i==L.length&&L.elem[i]!=X)

 printf("该数据在表中不存在!\n");//该算法监测数据表中重复数据的,对重复数据的位置进行监测

        

  }

}

 void insnode(SqList L ,ElemType X,int i)//---------------------------该操作在顺序表L的第i个位置上插入新的结点X

{ int j;

 if(i<0||i>L.length)

 return (-1);

 else

{

        L.length++;

       for(j=L.length-1;j>i-1;j--)

                L.elem[j]=L.elem[j-1];

         L.elem[j]=X;

 

  }

        print(L);

}

 void ListDelete(SqList L,int i)//---------------------------该操作在顺序表L删除第i个位置上的结点X,并用e返回值。

{ int e,j;

 if(i<0||i>L.length)

   printf("输入参数错误");

  else

 {  e=L.elem[i-1];

  for(j=i;j<L.length;j++)

  L.elem[j]=L.elem[j+1];

     L.length--;

      

   }printf("删除第%d个元素为%d\n",i,e);

         print(L);

}

 int main()

{  SqList L;

         inti,n;

         scanf("%d\n",&n);

         L.length=n;

         for(i=0;i<L.length;i++)

         {

                   scanf("%d",&L.elem[i]);

                  

         }

   //get(L,1);

   // locate(L,1);

    ListDelete(L,2);

   

         //      print(L);

}

 

//

//将两个顺序表中的数据进行合并,合并后的数据进行排序,即顺序合并两个表,重复的数据仅存一次

 

#include "stdio.h"

#include "time.h"

typedef int ElemType;

typedef struct{

         ElemTypeelem[100];

         intlength;

}SqList;

int LocateElem(SqList La,ElemType e)//-----------------定位表中的每个数据,以便进行重复的舍掉

{

         inti;

         for(i=0;i<La.length;i++)

                   if(La.elem[i]==e)returni+1;

                   return0;

}

void print(SqListLa)//-------------------------------------输出顺序表内的数据

{

         inti;

         for(i=0;i<La.length;i++)

                   if(!i)printf("%d",La.elem[i]);

                   elseprintf(" %d",La.elem[i]);  

printf("\n");

}

 

void Union(SqList &La,SqListLb)//-----------------将两个表中的数据进行连接,Lb的数据连接到La的表后去掉重复数。

{

         ElemTypee;

         inti;

         for(i=0;i<Lb.length;i++)

         {

                   e=Lb.elem[i];

                   if(!LocateElem(La,e))//去掉重复数。

                            La.elem[La.length++]=e;

        

                  

         }

         print(La);

        

}

 

void Union1(SqList &La,SqListLb)//-----------------将两个表中的数据进行连接,Lb的数据连接到La的表后保留重复数。

{

         ElemTypee;

         inti;

         for(i=0;i<Lb.length;i++)

         {

                   e=Lb.elem[i];

         //      if(!LocateElem(La,e))//去掉重复数。

                            La.elem[La.length++]=e;

        

                  

         }

         print(La);

        

}

//----------------------------------------------------------------------------------------------------------//

//------------------------------------排序--------------------------------//

//-----------------------------------------------------------------------//

void output1(SqList La)//-------------------------------冒泡排序发将合并后的数据进行降序排列

{

double tmp;

 for(int i=0;i<La.length;i++)

 for(int j=0;j<La.length-1-i;j++)

  {

  if(La.elem[j]<La.elem[j+1])

   {

   tmp=La.elem[j];

   La.elem[j]=La.elem[j+1];

   La.elem[j+1]=tmp;

   }

  }

  printf("冒泡排序 ");

print(La);

}

void output2(SqList La)//--------------------------------直接排序发将合并后的数据进行降序排列

{ int i,j,big,temp;

  for(i=0;i<La.length;i++)

  {  big=i;

     for(j=i+1;j<La.length;j++){

          if(La.elem[j]>La.elem[big])

                     {big=j;

                     }

     }

     temp=La.elem[i];

     La.elem[i]=La.elem[big];

     La.elem[big]=temp;

     

   }

     printf("直接排序 ");

print(La);

}

int main(int argc, char* argv[])

{

         SqListLa,Lb;

         intm,n,i;//将两个表中的数据进行连接,Lb的数据连接到La的表后保留重复数

         while(scanf("%d",&m)!=-1){

                   La.length=m;

                   for(i=0;i<m;i++)

                            scanf("%d",&La.elem[i]);

                   scanf("%d",&n);

                   Lb.length=n;

                   for(i=0;i<n;i++)

                            scanf("%d",&Lb.elem[i]);

                   //print(La);

                   //print(Lb);

//      Union1(La,Lb);//将两个表中的数据进行连接,Lb的数据连接到La的表后保留重复数

                   Union(La,Lb);//将两个表中的数据进行连接,Lb的数据连接到La的表后去掉重复数

                   output1(La);

                   output2(La);

                   printf("\n");

                   printf("Timeused = %.2lf\n",(double)clock()/CLOCKS_PER_SEC);

         }

       return0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值