数据结构线性表的基本操作(数组方式)

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值