c语言降序多项式加法,数据结构算法(多项式加法)的C语言完美实现
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*数据结构多项式加法用C语言的完美实现,书43页 算法 2.23[ 数据结构(C语言版) 严尉敏主编]*/
/*注释就不加了,本程序的所有函数书上都有说明*/
/*本程序Tourboc 2.0编译通过*/
#include
#include
#include
#include
#define TURE 1
#define FALSE 0
#define OK 1
typedef int status;
typedef struct {
float coef;
int expn;
}term,ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
}*link,*Position,NodeType;
typedef struct {
link head,tail;
int len;
}linklist;
typedef linklist polynomial;
Position Nextpos(linklist *l,link p)
{ if(l->head&&p->next) return(p->next);
else return NULL;
}
int cmp(term a,term b)
{ if(a.expn>b.expn) return 1;
else if(a.expn==b.expn) return 0;
else return -1;
}
status Makenode(link *p,ElemType e)
{ *p=(link)malloc(sizeof(NodeType));
if(!*p) {printf("Error,the memory is overflow!\n");exit(FALSE);}
(*p)->data=e;
(*p)->next=NULL;
return OK;
}
status Initlist(polynomial *p)
{ p->head=(link)malloc(sizeof(NodeType));
if(!p->head) { printf("Cannot find space!");exit(FALSE);}
p->len=0;
p->tail=p->head;
return OK;
}
status Insfirst(polynomial *l,link *q,link s)
{ if(l->head&&*q&&s)
{ s->next=(*q)->next;(*q)->next=s;
if(l->tail==*q) l->tail=s;
l->len++;
}
}
status LocateElem(linklist *l,ElemType e,Position *q,int (*cmp)(ElemType,ElemType))
{ link p1;
int t;
if(l->head)
{p1=l->head;*q=p1->next;t=(*cmp)((*q)->data,e);
while(*q&&t) { p1=*q;*q=(*q)->next;}
if(*q&&t) return OK;
else
{*q=p1; return FALSE;}
}
else return FALSE;
}
status Delfirst(polynomial *l,link *h,link *q)
{ if((*h)->next)
{ *q=(*h)->next;(*h)->next=(*q)->next;
if(l->tail==*q) l->tail=l->head;
l->len--;
}
}
status Append(linklist *l,link s)
{ if(l->head&&s)
{if(l->tail!=l->head) l->tail->next=s;
else l->head->next=s;
l->tail=s;
l->len++;
}
}
void Creatpolyn(polynomial **p,int m)
{ ElemType e;
link h,q,s;
int i;
Initlist(*p);
h=(*p)->head;
e.coef=0.0;e.expn=-1;h->data=e;h->next=NULL;
printf("Input Coef and Expn:\n");
for(i=1;i<=m;i++)
{scanf("%f%d",&e.coef,&e.expn);
if(!LocateElem(*p,e,&q,cmp))
if(Makenode(&s,e)) Insfirst(*p,&q,s);
}
}
void Addpolyn(polynomial **pa,polynomial **pb)
{ link ha,hb,qa,qb;
ElemType a,b;
int sum;
ha=(*pa)->head;hb=(*pb)->head;
qa=Nextpos(*pa,ha);qb=Nextpos(*pb,hb);
while(qa&&qb)
{ a=qa->data;b=qb->data;
switch(cmp(a,b))
{case -1:
ha=qa;qa=Nextpos(*pa,qa);break;
case 0:
sum=a.coef+b.coef;
if(sum!=0.0)
{qa->data.coef=sum;
ha=qa;
}
else
{Delfirst(*pa,&ha,&qa);free(qa);
}
Delfirst(*pa,&hb,&qb);free(qb);qb=Nextpos(*pb,hb);
qa=Nextpos(*pa,ha);break;
case 1:
Delfirst(*pa,&hb,&qb);Insfirst(*pa,&ha,qb);
qb=Nextpos(*pb,hb);ha=Nextpos(*pa,ha);break;
}
}
if((*pb)->head!=(*pb)->tail) Append(*pa,qb);
free(hb);
}
void print(polynomial *l)
{ link p;
p=l->head;
p=p->next;
printf("\n");
while(p)
{ printf("%f X^%d",p->data.coef,p->data.expn);
p=p->next;
if(p) printf("+");
}
printf("\n");
}
main()
{polynomial *p1,*p2;
link a1,a2;
int n1,n2;
printf("\nInput the length of polynomial L1(n1):\n");
scanf("%d",&n1);
Creatpolyn(&p1,n1);
printf("\nThe Polynomial L1:\n");
print(p1);
printf("\nInput the length of polynomial L2(n2):\n");
scanf("%d",&n2);
Creatpolyn(&p2,n2);
printf("\nThe Polynomial L2:\n");
print(p2);
Addpolyn(&p1,&p2);
printf("\nPolynomial L1 + Polynomial L2:\n");
print(p1);
}
——Djl23 于05年10月9日
后面的算法源代码将陆续公布�
c语言降序多项式加法,数据结构算法(多项式加法)的C语言完美实现相关推荐
- java冒泡排序算法代码降序_java实现冒泡排序算法
介绍 冒泡排序是一种算法,比较相邻元素,如果他们处在错误的位置上,那么交换他们的位置.排序可以进行升序或者降序. 原理 从第一个元素开始,比较第一个元素和第二个元素,如果第一个元素大于第二个元素,那么 ...
- 数据结构 算法与应用C 语言描述第六章,数据结构算法与应用-C语言描述002.pdf
下载 下载 第2 章 程 序 性 能 以下是本章中所介绍的有关程序性能分析与测量的概念: • 确定一个程序对内存及时间的需求. • 使用操作数和执行步数来测量一个程序的时间需求. • 采用渐进符号描述 ...
- 数据结构源码笔记(C语言):二叉排序树的基本操作算法
//二叉排序树的基本运算算法#include<stdio.h> #include<malloc.h>#define MaxSize 100typedef int KeyType ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- 数据结构源码笔记(C语言):哈希表的相关运算算法
//实现哈希表的相关运算算法 #include<stdio.h> #include<malloc.h> #include<string.h>#define MaxS ...
- 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
//二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...
- 数据结构源码笔记(C语言):B树的相关运算算法
//B树的相关运算算法#include<stdio.h> #include<malloc.h>#define MAXM 10//定义B树最大的阶数 typedef int Ke ...
- 字符串括号匹配c语言,数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法...
问题标题 数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法 2019-8-21来自ip:13.149.196.77的网友咨询 浏览量:270 手机版 问题补充 ...
- c语言算法设计 pdf下载,数据结构算法设计与实现指导(C语言版).pdf
3 章 栈--实验三 3.1 实验目的及要求 1.理解特 的线性结构--顺序栈的抽象数据类型的定义,及其在 C 语言环境中的 表示方法. 2 .理解顺序栈的基本操作的算法,及其在C 语言环境中一些主要 ...
最新文章
- php集成paypal付款流程,在PHP中集成PayPal标准支付
- 指针运算(自己做个笔记)
- 索尼搞了个大新闻!AI打败人类三冠王,登上Nature封面,这波让任天堂无话可说...
- python与excel结合-Python与Excel 不得不说的事情
- golang中string下标访问
- redis lettuce_Redis Client Lettuce 5 GA发布
- Apollo进阶课程 ① | 带你纵览无人车
- c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc
- opencv 颜色空间转换、颜色追踪
- python html解析_Python HTML解析器
- 【网络攻防】常见的网络攻防技术——黑客攻防(通俗易懂版)
- 【Python56--爬取妹子图】
- Android STB 遥控器适配
- 《计算智能导论》下载
- ios 推送通知服务证书不受信任(Apple Push Service certificate is not trusted)
- python 实体识别_英文实体识别的python实现
- 校外使用校园网访问外网
- 第十七章 再论没有银弹
- 仍是在思过崖攀爬的人
- 《稀缺》塞德希尔·穆来纳森 / 埃尔德·沙菲尔
热门文章
- 时间组件选择一个时间段_衡南(光伏支架组件安装)施工队
- anaconda 怎么安装xlrd_Pyinstaller打包,文件太大了怎么办?
- 英语计算机房和操场怎么读,计算机房对我们学习帮助很大. the , in studies , computer , room , helps , lot , a , our , us...
- 怎么查询mysql的语法_mysql查询语法
- ios请求头解决参数中文乱码_花了一天时间就解决了一个的请求头传参参数格式bug...
- text 两端对齐 小程序_小程序实现文字两端对齐
- 有道翻译接口问题(续)
- OpenCV的工具函数
- cocos2dx实现经典飞机大战
- [记录] ---阿里云java.io.IOException: Connection reset by peer的问题