#include <stdio.h>
#define MAX 10
typedef int ElemType;
typedef struct
{
ElemType elem[MAX];
int last;
}SqList;
//初始化
void InitList(SqList *L)
{
L->last=0;
}
//当前元素个数
int LenList(SqList L)
{
return L.last;
}
//插入操作
int InsertList(SqList *L,int i,ElemType x)
{
int k;
if(L->last>=MAX)
{
printf("表已满,无法插入\n");
return 0;
}
else if(i<0 || i>L->last+1)
{
printf("插入位置不合法\n");
return 0;
}
else
{
for(k=L->last;k>i-1;k--)
L->elem[k]=L->elem[k-1];
L->elem[i-1]=x;
L->last++;
return 0;
}
}
//删除操作
int DelList(SqList *L,int i)
{
int k;
if((L->last<=0) || (i<0) || (i>L->last))
{
printf("删除位置不合法\n");
return 0;
}
else
{
for(k=i;k<=L->last-1;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return 0;
}
}
///查找元素
int LocList(SqList L,ElemType x)
{
int i;
for(i=0;i<L.last;i++)
{
if(L.elem[i]==x)
{
printf("%d是线性表中第%d个元素\n",x,i+1);
return 0;
}
}
printf("没有找到%d\n",x);
return 0;
}
//逆置线性表
int RevList(SqList *L)
{
int i,m=L->last/2,n=L->last;
ElemType t;
for(i=0;i<m;i++)
{
t=L->elem[i];
L->elem[i]=L->elem[n-1-i];
L->elem[n-1-i]=t;
}
return 0;
}
//合并线性表
int MergeList(SqList *La,SqList *Lb,SqList *Lc)
{
int i=0,j=0,k=0;
while(i<La->last && j<Lb->last)
{
if(La->elem[i]<Lb->elem[j])
{
Lc->elem[k]=La->elem[i];
i++;k++;
}
else
{
Lc->elem[k]=Lb->elem[j];
j++;k++;
}
}
while(i<La->last)
{
Lc->elem[k++]=La->elem[i++];
}
while(j<Lb->last)
{
Lc->elem[k++]=Lb->elem[j++];
}
Lc->last=k;
return 0;
}
int main()
{
SqList La,Lb,Lc;
int i,x;
int n,m;//线性表长度
InitList(&La);//初始化
//输入La
printf("请输入线性表La的长度:");
scanf("%d",&n);
La.last=n;
printf("请输入线性表La中的元素\n");
for(i=0;i<n;i++)
scanf("%d",&La.elem[i]);
//插入
printf("\n请输入要插入到线性表La中的位置i和要插入的元素x\n");
scanf("%d%d",&i,&x);
InsertList(&La,i,x);
printf("\n线性表\n");
for(i=0;i<La.last;i++)
printf("%d ",La.elem[i]);
printf("\n");
//删除
printf("\n请输入要删除的元素的位置\n");
scanf("%d",&i);
DelList(&La,i);
printf("\n线性表La\n");
for(i=0;i<La.last;i++)
printf("%d ",La.elem[i]);
printf("\n");
//查找
printf("\n请输入要查找的元素:");
scanf("%d",&x);
LocList(La,x);
//逆置
RevList(&La);
printf("\n逆置后的线性表La\n");
for(i=0;i<La.last;i++)
printf("%d ",La.elem[i]);
printf("\n");
//初始化Lb
InitList(&Lb);
//输入Lb
printf("\n请输入线性表Lb的长度:");
scanf("%d",&m);
Lb.last=m;
printf("\n请输入线性表Lb中的元素\n");
for(i=0;i<m;i++)
scanf("%d",&Lb.elem[i]);
//初始化Lc
InitList(&Lc);
//合并La,Lb
MergeList(&La,&Lb,&Lc);
printf("\n合并后La和Lb后的线性表\n");
for(i=0;i<Lc.last;i++)
printf("%d ",Lc.elem[i]);
printf("\n\n");
return 0;
}
数据结构中顺序表的基本操作(纯C语言)
最新推荐文章于 2024-03-06 17:47:02 发布