新手学习数据结构与算法---链表多项式
来源:互联网 发布:中国网络通信有限公司 编辑:程序博客网 时间:2024/05/25 08:13
链表多项式。。。
如有错误多多指教
//多项式链表-------采用尾插法建立/*polynomial --- 多项式 coef---系数exp----指数next---指针*/#include <stdio.h> typedef struct Node //定义一个结构体,一个存系数,一个存指数 { int coef;int exp;struct Node * next; }PolyNode; //通过键盘按升幂的次序输入多项式各项的系数,指数,以输入指数-1为结束标志PolyNode * Create() //创建多项式链表,带有头结点 {PolyNode * Head, * R, * S;int c;int e;Head = (PolyNode *)malloc(sizeof(PolyNode));Head->next = NULL;R = Head;scanf("%d %d",&c, &e);while(e != -1){S = (PolyNode *)malloc(sizeof(PolyNode));S->coef = c;S->exp = e;S->next = R->next;R->next = S;R = S; //R永远是最后一个结点 scanf("%d %d",&c, &e);}return Head;} /*两个多项式也就是两个链表:指针p,q指向链表A,B的首元素结点;结果插到链表A (1): 若p->exp < q->exp ,指针p右移(2): 若p->exp = q->exp, 将两个结点系数相加:①系数之和不为0,就相加 ② 系数之和为0,将p,q结点都后移,再将他们删除 (3): 若p->exp > q->exp, 将 q结点插到p结点前面(4):若q=NULL,链表A 即为多项式链表 */PolyNode * PolyAdd(PolyNode * A, PolyNode * B) //将结果存在链表A中 ,B则删除 {PolyNode *p, *q, *temp, *pre;int sum;p = A->next; //从首元素结点开始 q = B->next;pre = A;free(B); //释放B头结点while((p != NULL) && (q != NULL)) {if(p->exp < q->exp){pre = p; //指向p前面的结点,方便以后操作 p = p->next;}else if(p->exp == q->exp) //如果指数相等 {sum = p->coef + q->coef;if(sum != 0){p->coef = sum;pre = p;p = p->next; //将p后移 B = q;q = q->next;free(B); //将B释放 }else{temp = p;p = p->next;pre->next = p;free(temp); //释放pB = q;q = q->next;free(B); //释放q } }else //若p->exp > q->exp {B = q->next;pre->next = q;q->next = p;pre = pre->next;p = B;}}if(q != NULL)pre->next = q; //若q还有剩余 } int main(){//自己测试}
- 新手学习数据结构与算法---链表多项式
- 多项式链表-算法设计与数据结构
- 新手学习数据结构与算法---链表归并
- 新手学习数据结构与算法---链表的箱子排序
- 数据结构入门学习系列-6(链表合并与多项式合并算法)
- 新手学习数据结构与算法---开始篇
- 新手学习数据结构与算法---冒泡排序
- C++算法与数据结构学习笔记------单链表实现多项式
- 新手学习数据结构与算法---快速排序算法
- 新手学习数据结构与算法---二分查找算法
- POJ-数据结构与算法-线性表 多项式加法
- 新手学习数据结构与算法---直接插入排序
- 新手学习数据结构与算法---直接选择排序
- 新手学习数据结构与算法---单链表的基本操作
- 新手学习数据结构与算法---堆栈基本操作
- 数据结构与算法——多项式加法
- 数据结构与算法学习之链表
- 【算法】数据结构与算法分析学习笔记——第三章习题选做快速傅里叶变换与多项式乘法
- 2、jQuery开发工具(spket)
- 连接数据库的步骤
- 基于Linux的新移动操作系统泰泽
- Oracle触发器(Trigger)与序列(Sequences)
- adb常用命令
- 新手学习数据结构与算法---链表多项式
- Luhn算法计算银联卡卡号校验位
- 使用.netrc文件进行自动ftp
- VC重载PreTranslateMessage事件实现鼠标双击
- set_irq_type 引发的 irq函数的变更
- HTTP协议
- inline内联函数的引入
- 对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
- 【转】]mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc的区别和不同