文章目录
关于多项式的加和、乘积
-
Dargon
-
2020/11/11
-
所遇到的的重要的问题:
-
教科书 来自:《数据结构和算法分析》第三章
对于链表操作,自己要去自己实现链表的节本功能,例如基本的created、insert、delete。要写出来,并且运行才知道其中的一些道理,和自己容易出错的地方
1,运用数组运算
-
运用数组存储对应指数的项的系数
例如对于数组a[10] 可以存储0 次方~ 9 次方的系数,数组的下标对应的是指数,数组的元素的内容对应的是该位的系数。 -
缺点
当遇到不连续的情况,就事倍功半了 如计算a = X^1000 +5X^10, b = X^1050 +X^1 +5
2,运用链表运算
Creat struct:
typedef struct PNODE {
int Coefficient;
int Exponent;
struct PNODE *Next;
}ListNode;
2.1 创建链表 Created_linklist
用两种方式创建链表
- 第一种 多申请一个head 浪费一些内存空间
ListNode *creat_list(int n) {
ListNode *root;
ListNode *pre, *current;
int c, e, i;
root =(ListNode *)malloc(sizeof(ListNode));
assert(root !=NULL);
pre =root;
for( i =0; i <n; i++ ) {
printf("请输入第%d项: ", i+1);
scanf("%d%d", &c, &e);
current =(ListNode *)malloc(sizeof(ListNode));
assert( current !=NULL );
current->Coefficient =c;
current->Exponent =e;
current->Next =NULL;
pre->Next =current;
pre =current;
}
return root;
}
- 此方法更合理
ListNode *creat_list_v2(int n) {
ListNode *root;
ListNode *newnode, *current;
int c, e, i;
root =current =NULL;
for(i =0; i <n; i++) {
printf("请输入第%d项: ", i+1);
scanf("%d%d", &c, &e);
newnode =(ListNode *)malloc(sizeof(ListNode));
assert( newnode != NULL );
newnode->Coefficient =c;
newnode->Exponent =e;
newnode->Next =NULL;
if(root ==NULL)
root =newnode;
else
current->Next =newnode;
current =newnode;
}
return root;
}
2.2 插入节点 insert ListNode
和正常的插入节点一样,将指向链表(根指针root)的指针作为参数传入到函数中,排除previous =NULL 的特殊情况
int insert_onenode_v2(ListNode **rootp) {
ListNode *current;
ListNode