用链表实现的多项式加减
头文件中的代码:
#include<iostream>
#include<stdio.h>
//函数结果状态代码
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status,Elemtype;
using namespace std;
//练习:多项式的加减运算:利用链表实现
//1、定义
typedef struct poly
{
float xi;
int zhi;
struct poly* next;
}poly,*Poly;
//2、初始化
Status InitList(Poly& L)
{
L = new poly; //生成新结点作为头结点,用头指针L指向头结点
L->next = NULL;//头结点的指针域置空;
return OK;
}
//3、建立链表
Status jlList(Poly& L,int n)
{
L=new poly;
L->next = NULL;
poly* r, * p;
r = L;
for (int i = 0; i < n; i++)
{
p = new poly;
cout << "请输入第" << i + 1 << "个数字的系数" << endl;
cin >> p->xi;
cout << "请输入第" << i + 1 << "个数字的指数" << endl;
cin >> p->zhi;
p->next = NULL;
r->next = p;
r = p;
}
return OK;
}
//4.判断链表是否为空
Status emptyList(Poly L)
{
if (L->next == NULL)
return ERROR;
else
return OK;
}
//5
//4.链表相加
poly* ListAdd(Poly L1, Poly L2)
{
poly* L3;
L3 = new poly;
L3->next = NULL;
poly* p, * q,*r,*s;
r = L3;
p = L1->next;
q = L2->next;
while (q && p)
{
if (p->zhi == q->zhi)
{
s = new poly;
s->xi = p->xi + q->xi;
s->zhi = p->zhi;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
q = q->next;
}
else if (p->zhi < q->zhi)
{
s = new poly;
s->xi = p->xi;
s->zhi = p->zhi;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
else if (p->zhi > q->zhi)
{
s = new poly;
s->xi = q->xi;
s->zhi = q->zhi;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
}
while (!q&&p)
{
s = new poly;
s->xi = p->xi;
s->zhi = p->zhi;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
while (!p && q)
{
s = new poly;
s->xi = q->xi;
s->zhi = q->zhi;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
return L3;
}
//5.显示链表中的元素
void display(Poly L)
{
poly* p;
p = L->next;
int j = 1;
while (p)
{
/*cout << "第" << j << "个元素的系数为" << p->xi << " ";
cout << "第" << j << "个元素的指数为" << p->zhi << endl;*/
cout << "第" << j << "项为:(" << p->xi << "," << p->zhi << ")"<<" " ;
p = p->next;
j++;
}
cout << endl;
}
主文件中代码:
#include<iostream>
#include"jiegou.h"
using namespace std;
int main()
{
poly* L1, * L2, * L3;
InitList(L1);
InitList(L2);
InitList(L3);
jlList(L1, 6);
jlList(L2, 3);
display(L1);
display(L2);
L3 = ListAdd(L1, L2);
display(L3);
return 0;
}
仅供自学练习,欢迎大佬指点!!!