多项式的加法运算(等待修改)

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct List
{
	ElemType index;
	ElemType aroe;
	struct List * next;
}Node,*LinkList;
int main()
{
	int n;
	void Inital_List(LinkList *h);
	void Creat_List(LinkList h,int n);
	void Show_List(LinkList h);
	int Judge_Empty(LinkList h);
	LinkList head;
	Inital_List(&head);
	printf("请输入第一个多项式的项数:");
	scanf("%d",&n);
	Creat_List(head,n);
	Show_List(head);
	printf("请输入第二个多项式的项数:");
	scanf("%d",&n);
	Creat_List(head,n);
	printf("********************************************************\n");
	printf("最终的结果为:\n");
	Show_List(head);
	free(head);
}
	void Inital_List(LinkList *h)//初始化带头结点的链表
	{
		*h=(LinkList)malloc(sizeof(struct List));
		if(NULL==*h)
		{printf("空间申请失败,初始化链表失败……\n");}
		else
		{
			(*h)->next=NULL;
			{printf("空间申请成功,链表已初始化……\n");}
		}
	}
	
	void Creat_List(LinkList h,int n)//根据所给的函数创建链表
	{
		int i,flag;
		Node *p=NULL,*q1=h,*q;
		for(q=h->next;q!=NULL;q=q->next)
		{q1=q;}//将q1移动到链表的尾部,因为会有两次函数的写入操作,如果只有一次函数的写入操作,就不需要这一步的移动了
		if(n<0)
			printf("数据输入不合法,无法执行函数操作\n");
		for(i=1;i<=n;i++)
		{
			flag=1;
			p=(Node *)malloc(sizeof(struct List));
			if(NULL==p)
			{printf("节点空间分配失败……\n");}
			else
			{
				printf("请输入第%d项对应的系数和指数:",i);
				scanf("%d%d",&p->aroe,&p->index);
				for(q=h->next;q!=NULL;q=q->next)
				{
					if(q->index==p->index)
					{flag=0;q->aroe+=p->aroe;break;}
				}							//在原来的链表中发现了指数相同的项,直接对其系数进行修改
				if(flag)
				{
					p->next=NULL;
					q1->next=p;
					q1=p;
				}//在原来的链表中没有发现指数相同的项,将新项直接连接到链表的尾部
			}
		}
		printf("该函数已成功输入进链表中\n");
	}

	int Judge_Empty(LinkList h)//判空函数
	{
		if(NULL==h->next)
		return 1;
		else
		return 0;
	}

	void Show_List(LinkList h)//显示函数
	{
		int k=1;
		struct List *p=(Node *)malloc(sizeof(struct List));
		p=h;
		for(p=h->next;p!=NULL;p=p->next)
		{
			printf("第%d项元素的系数为%d,指数为%d\n",k++,p->aroe,p->index);
		}
	}
下面给出完整的链表写法,动态分配内存给相应的数据
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct List
{
ElemType index;
ElemType aroe;
struct List * next;
}Node,*LinkList;
int main()
{
int n;
void Inital_List(LinkList *h);
void Creat_List(LinkList h,int n);
void Show_List(LinkList h);
int Judge_Empty(LinkList h);
LinkList head;
Inital_List(&head);
printf("请输入第一个多项式的项数:");
scanf("%d",&n);
Creat_List(head,n);
Show_List(head);
printf("请输入第二个多项式的项数:");
scanf("%d",&n);
Creat_List(head,n);
printf("********************************************************\n");
printf("最终的结果为:\n");
Show_List(head);
free(head);
}
void Inital_List(LinkList *h)//初始化带头结点的链表
{
*h=(LinkList)malloc(sizeof(struct List));
if(NULL==*h)
{printf("空间申请失败,初始化链表失败……\n");}
else
{
(*h)->next=NULL;
{printf("空间申请成功,链表已初始化……\n");}
}
}

void Creat_List(LinkList h,int n)//根据所给的函数创建链表
{
int i,flag;
Node *p=NULL,*q1=h,*q;
for(q=h->next;q!=NULL;q=q->next)
{q1=q;}//将q1移动到链表的尾部,因为会有两次函数的写入操作,如果只有一次函数的写入操作,就不需要这一步的移动了
if(n<0)
printf("数据输入不合法,无法执行函数操作\n");
for(i=1;i<=n;i++)
{
flag=1;
p=(Node *)malloc(sizeof(struct List));
if(NULL==p)
{printf("节点空间分配失败……\n");}
else
{
printf("请输入第%d项对应的系数和指数:",i);
scanf("%d%d",&p->aroe,&p->index);
for(q=h->next;q!=NULL;q=q->next)
{
if(q->index==p->index)
{flag=0;q->aroe+=p->aroe;break;}
} //在原来的链表中发现了指数相同的项,直接对其系数进行修改
if(flag)
{
p->next=NULL;
q1->next=p;
q1=p;
}//在原来的链表中没有发现指数相同的项,将新项直接连接到链表的尾部
}
}
printf("该函数已成功输入进链表中\n");
}


int Judge_Empty(LinkList h)//判空函数
{
if(NULL==h->next)
return 1;
else
return 0;
}


void Show_List(LinkList h)//显示函数
{
int k=1;
struct List *p=(Node *)malloc(sizeof(struct List));
p=h;
for(p=h->next;p!=NULL;p=p->next)
{
printf("第%d项元素的系数为%d,指数为%d\n",k++,p->aroe,p->index);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值