实验目的、要求
1.掌握握单链表的基本操作:插入、删除、查找等运算。
2.掌握单向链表的存储特点及其实现。
实验内容
采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。
代码实现
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include <windows.h>
typedef struct PList {
int coef; //系数
int expn; //指数
struct PList* next;//节点的指针域
} PList, * pnode;
PList* init_node() {
pnode head = (pnode)malloc(sizeof(PList));
head->coef = 0;
head->expn = 0;
head->next = NULL;
}
void create_polymial(pnode *p ,int num) {
pnode q, s = *p;
int n, i = 0;
int a, b;
printf("\n请输入第%d个多项式的项数:",num);
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d项系数与指数:",i+1);
scanf_s ("%d%d", &a, &b);
q = (pnode)malloc(sizeof(PList));
q->coef = a;
q->expn = b;
q->next = NULL;
s->next = q; //将新创建的节点 q 添加到链表的末尾
s = q; //更新 s 的值,使其指向新添加的节点
}
}
void printPList(pnode head,int num) {
pnode s = head;
if (num != 0)
printf("\n第%d个多项式显示如下:\n", num);
else
printf("\n多项式的和显示如下:\n");
while ((s->next)->next != NULL) {
s = s->next;
printf("%dx^%d + ", s->coef, s->expn);
}
s = s->next;
printf("%dx^%d\n",s->coef,s->expn);
}
void addPLists(pnode h1, pnode h2, pnode *h3) {
pnode s1, s2;
pnode sum = *h3, q;
int f;
for (s1 = h1->next; s1!= NULL; s1 = s1->next) {
f = 0;
for (s2 = h2->next; s2 != NULL; s2 = s2->next) {
if (s1->expn == s2->expn) {
q = (pnode)malloc(sizeof(PList));
q->coef = s1->coef + s2->coef;
q->expn = s1->expn;
q->next = NULL;
sum->next = q;
sum = q;
f = 1;
}
}
if (f == 0) {
q = (pnode)malloc(sizeof(PList));
q->coef = s1->coef;
q->expn = s1->expn;
q->next = NULL;
sum->next = q;
sum = q;
}
}
for (s2 = h2->next; s2 != NULL; s2 = s2->next){
f = 0;
for (s1 = h1->next; s1 != NULL; s1 = s1->next) {
if (s1->expn == s2->expn)
f = 1;
}
if (f == 0) {
q = (pnode)malloc(sizeof(PList));
q->coef = s2->coef;
q->expn = s2->expn;
q->next = NULL;
sum->next = q;
sum = q;
}
}
}
void test() {
printf("Project1-1:一元多项式的存储与两个多项式相加\n");
pnode s1 = init_node();
create_polymial(&s1,1);
printPList(s1,1);
pnode s2 = init_node();
create_polymial(&s2, 2);
printPList(s2,2);
pnode sum = init_node();
addPLists(s1, s2, &sum);
printPList(sum, 0);
}
int main(){
test();
return 0;
}