//顺序表的基本操作
#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;
}
顺序表的基本操作
最新推荐文章于 2021-10-16 10:06:06 发布