顺序表实现多项式加法

按照x的幂递增的方式依次输入,回车表示一条链表的结束

【输入】2 0 2 3 

               1 1 3 3

【输出】2 0 1 1 5 3

代码如下:
 

typedef struct Data
{
	int c;
	int e;
}data;

typedef struct Sqlist
{
	data a[10];
	int length=0;
}Sqlist;

Sqlist creat(Sqlist &L)
{
	int c;
	int e,i=0;
	char cc;
	while(1)
	{
		scanf("%d%d",&L.a[i].c,&L.a[i].e);	
		i++;
		L.length++;
		cc=getchar();
		if(cc=='\n') break;	
	}
	return L;
}
void Delete(Sqlist &L,int i)                             //顺序表删除第i个元素 
{
	int j;
	if(i<1 || i>L.length) return;
	for(j=i-1;j<L.length-1;j++)
	{
		L.a[j]=L.a[j+1];
	}
	L.length--;
}
void insert(Sqlist &L,int i,data x)                          //顺序表在第i个位置上插入元素 
{
	int j;
	if(i<1 || i>L.length+1 ) return;
	if(L.length>=10) return;                        //表中的元素超过结构体中的10 储存空间已满不能再添加 
	for(j=L.length;j>=i;j--)
	{
		L.a[j]=L.a[j-1];
	}
	L.a[i-1]=x;
	L.length++;
}
void add(Sqlist &L1,Sqlist &L2)
{
	int i=0,j=0;
	int temp;
	while(i<L1.length && j<L2.length)
	{
		if(L1.a[i].e==L2.a[j].e)                  //1.指数相等  (相加后是否等于0?) 
		{
			temp=L1.a[i].c+L2.a[j].c;
			if(temp==0)                       //相加=0的要从L1中删除 
			{
				Delete(L1,i+1);
				j++;
			}
			else 
			{
				L1.a[i].c=temp;
				i++;
				j++;
			}
		}
		else if(L1.a[i].e>L2.a[j].e)         //2.L1的指数大于L2  直接插入 
		{
			insert(L1,i+1,L2.a[j]);
			i++;
			j++; 
		}
		else if(L1.a[i].e<L2.a[j].e)       //3.L1的指数小于L2  后移 
		{
			i++; 
		}
	}
	while(j<L2.length)                  //L2中剩余的元素 
	{
		insert(L1,L1.length+1,L2.a[j]);
		j++;
	}
}
main()
{
	Sqlist L1,L2;
	L1=creat(L1);
	L2=creat(L2);
	add(L1,L2); 
	for(int i=0;i<L1.length;i++)
	{
		printf("%d %d ",L1.a[i].c,L1.a[i].e);
	}
	return 0;
}

测试成功

涉及了顺序表的插入、删除函数,其实分情况无非是指数相同、大于、小于三种,具体写的时候还是要多细心一些,脑子要绕晕乎了TT  

如有错误欢迎评论区大佬指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值