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日

后面的算法源代码将陆续公布�

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 算术平均滤波法_单片机数字滤波的算法

单片机主要作用是控制外围的器件&#xff0c;并实现一定的通信和数据处理。但在某些特定场合&#xff0c;不可避免地要用到数学运算&#xff0c;尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。在单片机进行数据采集时&#xff0c;会遇…

非顺序控制结构的c语言语法是怎样的,流程控制语句:顺序结构和选择结构

流程控制语句概述:控制程序的执行流程分类:顺序结构选择结构循环结构顺序结构语句顺序结构语句:从上往下,依次执行选择结构if语句:switch语句:if语句:格式1:格式2:格式3:if语句的格式&#xff1a;if(比较表达式){语句体;}执行流程:先计算比较表达式的值,看其返回值是true还是fa…

python3 asyncio 爬虫_python3 asyncio异步新浪微博爬虫WeiboSpider

一些废话之前写的用python3urllib写的多线程微博(传送门)&#xff0c;后面发现登录账号频繁被403&#xff0c;所以解决登录问题迫在眉睫。而且python的“多线程”并不那么多线程&#xff0c;最近因为刚需&#xff0c;需要稳定的微博爬虫&#xff0c;所以琢磨了一下使用selenium…

linux .forward,linux forward的实现

对于linux的数据包流向&#xff0c;大家应该是比较了解&#xff0c;如果还不是很了解&#xff0c;可以参考《OReilly.Understanding.Linux.Network.Internals.Dec.2005》&#xff0c;其中有一个图非常清楚的描述了数据包的流向。ip的数据包接收函数是ip_rcv()>ip_rcv_finish…

参数 携带 跳转_微信小程序:页面跳转及参数传递

本文首发自个人自有博客&#xff1a;【FaxMiao个人博客】&#xff0c;一个关注Web前端开发技术、关注用户体验、记录前端点滴&#xff0c;坚持更多原创&#xff0c;为大家提供高质量技术博文&#xff01;前言小程序的跳转方法有很多种&#xff0c;有的人一直只用wx.navigateTo跳…

android+apk启动过程,Android Apk的运行过程(一)—— Activity启动与页面事件传递...

最近在看一本书--《Android 内核剖析》。看名字很唬人&#xff0c;内核剖析&#xff0c;看起来是讲很深入的东西&#xff0c;其实作者自己在前言里也说了对于Android内核深度的一些见解。此书其实只是一些抛砖引玉&#xff0c;对于更深度与更细节的东西并没有涉猎&#xff0c;但…

python在数字后添加字符_Python在字符前后补字符

def addForLR(voldStr, vaddStr, vlength, vleftTrue):"""数字前补0可以补"0"也可以补""# print(tools.addForLR(1123,0,6));# print(tools.addForLR(1123,0,6,False));param voldStr 旧字符串param vaddStr 添加字符串param vlength 字符长…

google 浏览器默认打开控制台_chrome浏览器使用 Console(控制台)

chrome浏览器使用 Console(控制台) 了解如何:打开DevTools Console(控制台),堆叠冗余消息或在自己的行上显示它们,清除或保持输出或将其保存到文件,过滤输出,以及了解其他Console(控制台)设置。 TL;DR 以专用面板形式,或作为任何其他面板的抽屉式面板的形式,打开Console…

android 外部内容分享到app内,外部跳转APP

需求广告推广、华为微服务&#xff1b;通过外部网页或者卡片跳转到我们的app指定界面。如果app已经存在打开app&#xff0c;app不存在跳转下载界面。APP配置android:name".LauncherActivity"android:launchMode"singleTask"android:screenOrientation"…

vue组件一直注册不了_Vue自定义组件及组件的注册方法

为了能在模板中使用&#xff0c;这些组件必须先注册以便 Vue 能够识别。这里有两种组件的注册类型&#xff1a;全局注册和局部注册。至此&#xff0c;我们的组件都只是通过Vue.component全局注册的&#xff1a;Vue.component(component-name, {// ... options ...})该组件名Vue…

android fragment 管理器,Android Fragment 與 Fragment管理器

Android Fragment 與 Fragment管理器首先談談Fragement的需求過去開發人員認為界面之間的跳轉只需要使用多個activity組成就行了&#xff1b;例如下圖中&#xff0c;在Activity-A管理的界面中單擊按鈕后&#xff0c;Activity-A響應事件並啟動Activity-B&#xff1b;而用戶在單擊…

如何把本地yum源给其他机器使用_如何使用系统安装盘做yum的本地源?

第一种方法&#xff1a;1。 在server1上copy所有光盘的内容到/server/rhel5/i386/&#xff0c;并对此目录做好了NFS共享&#xff0c;然后把Server下repodata改名为repodata。ins2。 # createrepo -g /misc/cd/Server/repodata。ins/comps-rhel5-server-core。xml -v /server/rh…

android 手机 报证书错误,Android设备中的SSL证书错误

了解网络科技近年来高速增长&#xff0c;对人们日常生活的影响可通过PC端和移动设备的使用增长数据可以推断。在数字化技术的今天&#xff0c;用户也希望能够在移动设备上保护网站的信息以及用户的数据。SSL证书是保护网站信息的安全协议&#xff0c;也是目前互联网站点必备的安…

手机调试_手机充值不好用?因为正在调试期

“嘀&#xff0c;余额不足&#xff0c;请充值”我们在乘坐公交车的时候&#xff0c;经常会遇到这种情况&#xff0c;上车才发现余额不足&#xff0c;下班又没时间去给公交卡充值&#xff0c;给生活带来了很大的不便&#xff0c;难道就没有更加方便快捷的方法吗&#xff1f;比如…

android 网页json数据传输,如何将JSON格式的数据从WebView传递到HTML页面

我试图将JSON格式的数据从我的Android WebView传递到HTML页面.但是,每当我尝试解析原始JSON数据时应用程序崩溃,我希望格式为{“key”&#xff1a;“data”}我的应用程序的目标是解释此JSON数据,将其形成一个值数组,并将其发送到HTML页面.这是正确的方法吗&#xff1f;这是我的…

七参数 布尔萨 最小二乘法_最小二乘法和最大似然法的联系

目录最小二乘法概念最大似然法概念两者的联系总结一、最小二乘法概念最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际…

android 浮动按钮拖拽,小程序拖拽浮动按钮

小程序拖拽浮动按钮2019-5-22 分类: 小程序小程序 浮动 拖拽 按钮不借助movable-area自带的组件&#xff0c;实现拖拽效果wxmljs&#xff1a;var startPoint;Page({data: {buttonTop: 0,buttonLeft: 0,windowHeight: ,windowWidth: },onLoad: function (options) {var that…

axios vue 加载效果动画_vue+axios+element ui 实现全局loading加载示例

实现全局loading加载分析需求&#xff0c;我们只需要在请求发起的时候开始loading&#xff0c;响应结束的时候关闭loading&#xff0c;就这么简单 对不对&#xff1f;import axios from axios;import { Message, Loading } from element-ui;import Cookies from js-cookie;impo…

android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)

APP UI Automation Framework一个基于 Appium 1.8.1、TestNG&#xff0c;Page Object 模式开发的 UI 自动化测试框架介绍文档结构图基本功能每秒生成一次截图通过 xml 配置待执行的测试用例通过 yml 指定待执行测试的设备及 Appium 端口用例执行失败自动重试&#xff0c;且重试…

长虹android电视安装apk,长虹电视通过安卓手机安装沙发管家教程

‍本文教程适用于长虹电视LED39(48/50/55)C 2080i等相类似型号&#xff1b;【安装步骤简介】安卓手机安装沙发管家手机版--手机和智能电视/盒子用同一个路由器连接--沙发管家手机版推送安装【操作方法详情】1、使用您的安卓手机下载并安装沙发管家手机版&#xff1a;http://pub…