#include<stdio.h>
#define maxsize 100
#define OK 1
#define ERROR 0
struct list
{
int a[maxsize];
int last;
};
//i均为正常的序号,从1开始
int Locate(struct list l,int e)//按内容查找
{ int i=0;
while((i<=l.last)&&l.a[i]!=e)
{
i++;
}
if(i<=l.last)
return i; //未找到
else
return -1;//返回正常序号
}
void Insert(struct list* p,int i,int e)//插入操作
{ int k=0;
if(i<1||i>p->last+2)
{printf("插入位置错误!\n");
return;
}
if(p->last>=maxsize)
{printf("表已满!\n");
return;
}
for(k=p->last;k>=i-1;k--)//从后往前
{
p->a[k+1]=p->a[k];
}
p->a[i-1]=e;
p->last++;
}
int dd;
void Delete(struct list *p,int i)
{ int k=0;
if(i<1||i>p->last+1)
{printf("删除位置错误!");
}
dd=p->a[i-1];
for(k=i-1;k<=p->last-1;k++)
p->a[k]=p->a[k+1];
p->last--;
}
void print(struct list l)
{ int i=0;
for(i=0;i<=l.last;i++)
printf("%d ",l.a[i]);
printf("\n");
}
void Merge(struct list *p,struct list *q,struct list *r)
{
int m=0,j=0,k=0;
while(m<=p->last&&j<=q->last)
{
if(p->a[m]<=q->a[j])
{r->a[k]=p->a[m];
k++;
m++;
}
else
{r->a[k]=q->a[j];
k++;
j++;
}
}
while(m<=p->last)
{ r->a[k]=p->a[m];
m++;
k++;
}
while(j<=q->last)
{
r->a[k]=q->a[j];
j++;
k++;
}
r->last=p->last+q->last+1;
printf("c的last为%d\n",r->last);
}
int main()
{ struct list m,n,o,c;
struct list *mp;
struct list *op;
struct list *np;
struct list *cp;
mp=&m;
op=&o;
np=&n;
cp=&c;
int d,i,e,x;
printf("输入4个数字组成数组m从小到大\n");
for(d=0;d<4;d++)
{scanf("%d",&m.a[d]);}
printf("输入4个数字组成数组n从小到大\n");
for(d=0;d<4;d++)
{scanf("%d",&n.a[d]);}
printf("输入5个数字组成数组o从小到大\n");
for(d=0;d<5;d++)
{scanf("%d",&o.a[d]);}
m.last=3;
n.last=3;
o.last=4;
printf("插入操作,输入位置和元素\n");
scanf("%d%d",&i,&e);
Insert(mp,i,e);
print(m);
printf("查找n的操作,输入元素\n");
scanf("%d",&e);
x=Locate(m,e);
printf("在n中查找元素的位置在%d\n",x);
printf("删除m的操作,输入位置\n");
scanf("%d",&i);
Delete(mp,i);
printf("删除m后");
print(m);
printf("删除的元素是%d\n",dd);
printf("合并n和o,\n");
Merge(np,op,cp);
printf("输出n\n");
print(n);
printf("输出o\n");
print(o);
print(c);
return 0;
}
数据结构线性表的基本操作(数组方式)
最新推荐文章于 2023-03-27 15:22:58 发布