最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
在VC++6.0下可运行,当初还写了不少注释。
#include <iostream>
using namespace std;
//实训2:多项式的表示和相加
/*建立多项式节点*/
typedef struct PNode
{
int exp; //指数
float coef; //系数
struct PNode *next; //指向下个节点
}PolyNode, *PolyList;
/*建立带头结点的单链表*/
PolyList create()
{
PolyList h, p;
int e;
float c;
h = (PolyList)malloc(sizeof(PolyNode)); //建立头结点
h->next = NULL;
cout << "Enter coef and exp: ";
cin >> c >> e;
while (e != -1) //以指数为-1的节点结束链表构建
{
p = (PolyList)malloc(sizeof(PolyNode));
p->exp = e;
p->coef = c;
p->next = h->next;
h->next = p;
cout << "Enter coef and exp: ";
cin >> c >> e;
}
return (h);
}
/*输出单链表的值*/
void Print(PolyList h)
{
PolyList p;
p = h->next;
while (p != NULL)
{
cout << p->coef << " "<< p->exp << " "
<<endl;
p = p->next;
}
}
/*求单链表polya与polyb对应多项式的和*/
void PolyAdd(PolyList polya, PolyList polyb)
{
PolyList pa, pb, pre, temp;
float sum;
pa = polya->next;
pb = polyb->next;
pre = polya;
while (pa != NULL && pb != NULL) //遍历链表polya 和 polyb
{
if (pa->exp < pb->exp)
{
pre->next = pa;
pre = pre->next;
pa = pa->next;
}
else if (pa->exp == pb->exp)
{
sum = pa->coef + pb->coef;
if (sum != 0)
{
pa->coef = sum;
pre->next = pa;
pre = pre->next;
pa = pa->next;
temp = pb->next;
free(pb);
pb = temp;
}
else
{
temp = pa->next;
free(pa);
pa = temp;
temp = pb->next;
free(pb);
pb = temp;
}
}
else
{
pre->next = pb;
pre = pre->next;
pb = pb->next;
}
}
if (pa != NULL) //若遍历后剩余polya,则将剩余节点接入主链表
pre->next = pa;
if (pb != NULL) //若遍历后剩余polyb,则将剩余节点接入主链表
pre->next = pb;
}
/*main 函数*/
int main ()
{
PolyList pa, pb;
pa = create();
pb = create();
PolyAdd(pa, pb);
Print(pa);
return 0;
}