varstatus.first delfirst;其中并以q返回,请问q返回的是什么

银行业务模拟程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
银行业务模拟程序
&&用 Turbo C 语言设计实现一个用事件驱动的银行业务离散模型, 模拟每一个客户到达银行、排入人最少的业务窗口队列、排至窗口并处理完业务后离开的整个过程,统计客户在银行的平均逗留时间
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢数据结构实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据结构实验报告
&&数据结构实验报告
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢9813人阅读
ANSI/ISO C/C++(19)
C语言实现集合的交,并,差作者:Raining_C&&&&& 来源:&&&&
【问题描述】 &&&&&&& 编制一个能演示执行集合的并、交和差运算的程序【基本要求】&&&&&& (1)集合的元素限定为小写字母字符[ 'a'......'z' ]&&&&&& (2 )演示程序以用户和计算机对话的方式执行【测试数据】
【实现提示】&&&&&&&&& 以有序链表表示集合【代码过程】&&& 1。先定义 集合的数据类型 notes.h&& &&&&&&&&&
//notes.htypedef struct LNode...{&&& ElemType&&&&&& LNode&&&&&&& *}*Link, *P
typedef struct...{&&& Link&&& head,&&& int&&&&&&&}LinkS&& //~&&& 2。以后要用的一些常量放在&& constValues.h&&&&&& #include&stdio.h&#include &malloc.h&#include &stdlib.h&//函数结果状态代码#define&&& TRUE&&& 1#define&&& FALSE&&& 0#define&&& OK&&&&&&& 1#define&&& ERROR&&& 0#define&&& INFEASIBLE&&& -1#define OVERFLOW&&& -2&&&
#define ElemType&&&&&&& int&&&&&&& //存放数据的类型
typedef int&&& S&&&&&&&&&&&&&&& //函数的返回值&& //~&&& 3。集合实现函数&& setsFun.h
/**//****************** 函数定义 *********************/Status InitSets(LinkSet &ls)...{&&& &&& //初始化 集合&&& ls.head = (Link) malloc( sizeof(Link));&&& ls.tail = (Link) malloc( sizeof(Link));&&& &&& if(!ls.head || !ls.tail) exit(OVERFLOW);&&& //如果分配失败
&&& ls.head-&next = ls.tail-&next =&&& NULL;&&&&&&& //头、尾指针为空&&& ls.len = 0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //长度为0&&& &&& return OK;}
Status CreateNode(Link &link,ElemType e)...{&&& //创建一节点,内容为e&&& link = (Link) malloc( sizeof(Link));&&& if(!link)&&& exit(OVERFLOW);&&& &&& link-&data =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //值设定&&& link-&next = NULL;&&&&&&&&&&&&&&&&&&&&&&&&&&& //指向空&&& return OK;}
Position PriorInsertNode(LinkSet &ls,Link &link)...{&&& //找出节点link要插入到ls的前一个节点&&& if(!ls.head-&next) return ls.&&& Link h1 = ls.head-&next, h2 = h1-&&&&&&&&&&&& //h1:前一节点,h2:前一节点的后一节点&&& if(link-&data & h1-&data) return ls.&&&&&&& //如果比第一个节点小,返回头指针&&& while(h1 && h2)...{&&&&&&& if(h1-&data & (link-&data) && h2-&data & (link-&data) )&&& //如果&h1& && &h2,说明找到插入的地方了&&&&&&&&&&&&&&&&&& if(h1-&data == (link-&data) || h2-&data ==(link-&data) )&&&&&&&&&&& return NULL;&&&&&&&&&&&&&&&&&&&&&&&&&&& //如果重复,返回NULL&&&&&&& else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //否则,顺次往后挪一个节点&&&&&&&&&&& h1=h2,h2=h1-&&&& }&&& return h1;}
Status Append(LinkSet &ls, Link &link)...{&&& //向集合末尾追加节点&&& if(ls.head-&next == NULL)&&& ls.head-&next =&&& else ls.tail-&next-&next =&&& ls.tail-&next =&&& ls.len ++;&&& return OK;}
Status InsertNode(LinkSet &ls, Link &link)...{&&& //向集合中插入节点&&& Position p = PriorInsertNode(ls,link);&&& if(!p)&&& return ERROR;&&&&&&&&&&&&&&&&&&&&&&& //如果集合中已有相应元素&&& link-&next = p-&&&& if(!p-&next)&&& ls.tail-&next =&&&&&&& //如果前一节点为尾节点,修改tail&&& p-&next =&&& &&& ls.len++;&&& return OK;}
Position PriorNode(LinkSet &ls, Link &link)...{&&& //返回集合中 该节点的前一节点,不存在返回NULL&&& int j=0;&&& Link pre,h = ls.&&& while(h-&next && j&=ls.len && h!=link)...{&&&&&&& pre = h=h-& j++;&&& }&&& if(j==0)&&& return&&& NULL;&&&}
Status PrintSets(LinkSet &ls)...{&&& //打印集合&&& Link h=ls.head-&&&& printf(&[ &);&&& while(h)...{&&&&&&& printf(&%c &,h-&data);&&&&&&& h = h-&&&& }&&& printf(& ] &);&&& return OK;}
Position GetHead(LinkSet &ls)...{&&& //获得集合的头节点&&& return ls.}
Position NextPos(Link &link)...{&&& //获得当前节点的下一个节点&&& return link?link-&next:}
Status Empty(LinkSet &ls)...{&&& //空为真&&& return ls.head-&next==NULL;}
ElemType GetCurElem(Link &link)...{&&& //获得当前节点的数据&&& return link-&}
int Compare(Link &la, Link &lb)...{&&& //判断两个节点的大小&&& return la-&data - lb-&}
int Compare(ElemType e1, ElemType e2)...{&&& //比较两个数字的大小&&& return e1-e2;&&& }
Status DelFirst(LinkSet &ls,Link &q)...{&&& //已知h为线性链表的头节点,删除表中的第一个节点,并以q返回&&& Link h = ls.&&& if(!h-&next) return ERROR;&&& q = h-&&&& &&& h-&next = h-&next-&&&& q-&next=NULL;&&& &&& ls.len--;&&& return OK;}
Status FreeNode(Link &l)...{//释放节点,有问题&&& free(l);&&& return OK;}
Status UnionSets(LinkSet lsa, LinkSet &lsb, LinkSet &lsc)...{&&& //已知集合ls1,ls2的元素按值非递减排列&&& //将集合ls1,ls2的并集到ls3&&& if( !InitSets(lsc) ) return ERROR;&&& L&&& Link ha = lsa.head, hb=lsb.&&&&&&&&&&& //找到两节点的头指针&&& Link pa = NextPos(ha), pb = NextPos(hb);&&& while( !Empty(lsa) && !Empty(lsb) )...{&&&&&&& &&&&&&& int result = Compare(pa,pb);&&&&&&&&&&& //比较两节点大小&&&&&&& if(& result&0) ...{&&&&&&&&&&& DelFirst(lsa,node);Append(lsc,node); pa = NextPos(ha);&&&&&&& //向lsc插入lsa的相关节点&&& &&&&&&& }else if(result&0)...{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //向lsc插入lsb的相关节点&&&&&&&&&&& DelFirst(lsb,node);Append(lsc,node); pb = NextPos(hb);&&& &&&&&&& }else...{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&& DelFirst(lsb,node); pb = NextPos(hb);//如果两 节点相同,删除lsb中重复的节点,即以lsa为标准&&&&&&& }&&& }&&& while(!Empty(lsa))...{&&&&&&&&&&& &&&&&&& DelFirst(lsa,node);Append(lsc,node);&&& }&&& while(!Empty(lsb))...{&&&&&&& DelFirst(lsb,node);Append(lsc,node);&&& }&&& return OK;}
Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{&&& //已知集合ls1,ls2的元素按值非递减排列&&& //将集合ls1,ls2的交集到ls3&&& if( !InitSets(lsc) ) return ERROR;&&& L&&& Link ha = lsa.head, hb=lsb.&&& Link pa = NextPos(ha), pb = NextPos(hb);&&& while( !Empty(lsa) && !Empty(lsb) )...{&&&&&&& int result = Compare(pa,pb);&&&&&&& if(& result&0) ...{&&&&&&&&&&& DelFirst(lsa,node);pa = NextPos(ha);&&&&&&&&&&& &&&&&&& }else if(result&0)...{&&&&&&&&&&& DelFirst(lsb,node); pb = NextPos(hb);&&& &&&&&&& }else...{&&&&&&&&&&& DelFirst(lsb,node); Append(lsc,node);pb = NextPos(hb);&&&&&&&&&&& DelFirst(lsa,node);pa = NextPos(ha);&&&&&&& }&&& }&&& while(!Empty(lsa))...{&&&&&&& DelFirst(lsa,node);Append(lsc,node);&&& }&&& return OK;}
Status DifferenceSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{&&& //已知集合ls1,ls2的元素按值非递减排列&&& //ls3 = ls1 - ls2&&& if( !InitSets(lsc) ) return ERROR;&&& L&&& Link ha = lsa.head, hb=lsb.&&& Link pa = NextPos(ha), pb = NextPos(hb);//,pb2 = NextPos(pb1);&&& while( !Empty(lsa) && !Empty(lsb) )...{&&&&&&& int result = Compare(pa,pb);&&&&&&& if(& result&0) ...{&&&&&&&&&&& DelFirst(lsa,node);Append(lsc,node);pa = NextPos(ha);&&&&&&&&&&& &&&&&&& }else if(result&0)...{&&&&&&&&&&& DelFirst(lsb,node); pb = NextPos(hb);&&& &&&&&&& }else...{&&&&&&&&&&& DelFirst(lsa,node); pa = NextPos(ha);&&&&&&&&&&& DelFirst(lsb,node); pb = NextPos(hb);&&&&&&&&&&& &&&&&&& }&&& }&&& return OK;}
Status CopySets(LinkSet lsa, LinkSet lsb)...{&&& //将集合lsa拷贝到lsb中&&& InitSets(lsb);&&& Link la = lsa.head-&next, lb = lsb.head-&&&& while(la)...{&&&&&&& L&&&&&&& CreateNode(node,la-&data);&&&&&&& lb=&&&&&&& lsb.len++;
&&&&&&& la = la-&&&&&&&& lb = lb-&&&& }&&& lsb.tail =&&& return OK;}//~&&& 4。测试 test.cpp#include &constValues.h&&&&&&&& //常量头 文件#include &notes.h&&&&&&&&&&&&&&&& //节点定义 头文件#include &setsFun.h&&&&&&&&&&&& //集合操作函数 头文件
/**//**************** 测试 ***********************************/void Initialization()...{&&& printf(&**************************************************************************** &&&& );&&& printf(&*MakeSet1-1&&&& MakeSet1-2& Union-u& Intersection-i& Difference-d& Quit-q * &&&& );&&& printf(&**************************************************************************** &&&& );}
void main()...{&&& &&& LinkSet set1,set2,set3,seta,&&& InitSets(set1),InitSets(set2);&&&&&&& //初始化集合&&& while(1)...{&&&&&&& Initialization();&&&&&&&&&&&&&&& &&&&&&& printf(&集合Set1:&);&&&&&&& PrintSets(set1);&&&&&&&&&&&&&&& //打印集合set1&&&&&&& printf(&集合Set2:&);&&&&&&& PrintSets(set2);&&&&&&&&&&&&&&& //打印集合set1&&&&&&& printf(&请键入操作代码:&);&&&&&&& fflush(stdin);&&&&&&& //清空缓冲区&&&&&&& char oper = getchar();&&&&&&& char setsContent[200];&&&&&&& switch(oper)&&&&&&& ...{&&&&&&& case '1':&&&&&&&&&&&&&&&&&&&&&&& //集合set1 赋值&&&&&&&&&&& printf(&请输入集合Set1的内容:&);&&&&&&&&&&& fflush(stdin);&&&&&&&&&&& gets(setsContent);&&&&&&&&&&& &&&&&&&&&&& InitSets(set1);&&&&&&&&&&& SetSets(set1,setsContent);&&&&&&&&&&& &&&&&&&&&&&&&&&&&& case '2':&&&&&&&&&&&&&&&&&&&&&&& //集合set1 赋值&&&&&&&&&&& printf(&请输入集合Set1的内容:&);&&&&&&&&&&& fflush(stdin);&&&&&&&&&&& gets(setsContent);&&&&&&&&&&& InitSets(set2);&&&&&&&&&&& SetSets(set2,setsContent);&&&&&&&&&&&&&&&&&& case 'u':&&&&&&& case 'U':&&&&&&&&&&&&&&&&&&&&&&& //求并&&&&&&& &&&&&&&&&&& InitSets(set3);&&&&&&&&&&& &&&&&&&&&&& CopySets(set1,seta);&&&&&&& //因为求并的算法是添加一个节点,删除set1,set2中对应的节点,&&& &&&&&&&&&&& CopySets(set2,setb);&&&&&&& //所以要复制一份&&&&&&&&&&& UnionSets(seta,setb,set3);&&& //下同&&&&&&& &&&&&&&&&&& printf(&set1 U set2=: &);&&&&&&&&&&& PrintSets(set3);&&&&&&&&&&& fflush(stdin);&&&&&&&&&&& getchar();&&&&&&&&&&&&&&&&&& case 'i':&&&&&&& case 'I':&&&&&&&&&&&&&&&&&&&&&&& //求交&&& &&&&&&&&&&& InitSets(set3);&&&&&&& &&&&&&&&&&& CopySets(set1,seta);&&&&&&&&&&&&&&& &&&&&&&&&&& CopySets(set2,setb);&&&&&&&&&&& IntersectionSets(seta,setb,set3);&&&&&&&&&&& printf(&set1 交 set2=: &);&&&&&&&&&&& PrintSets(set3);&&&&&&&&&&& fflush(stdin);&&&&&&&&&&& getchar();&&&&&&&&&&&&&&&&&& case 'd':&&&&&&& case 'D':&&&&&&&&&&&&&&&&&&&&&&& //求差&&&&&&&&&&& InitSets(set3);&&&&&&& &&&&&&&&&&& CopySets(set1,seta);&&&&&&&&&&& &&&&&&&&&&& CopySets(set2,setb);&&&&&&&&&&& DifferenceSets(seta,setb,set3);&&&&&&&&&&& printf(&set1 - set2=: &);&&&&&&&&&&& PrintSets(set3);&&&&&&&&&&& fflush(stdin);&&&&&&&&&&& getchar();&&&&&&&&&&&&&&&&&&&&&& &&&&&&& case 'q':&&&&&&& case 'Q':&&&&&&&&&&& exit(0);&&&&&&&&&&&&&&&&&& }&&&&&&& system(&cls&);&&& //清屏&&& }}
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:116548次
积分:1609
积分:1609
排名:千里之外
原创:32篇
评论:74条
(1)(1)(10)(9)(1)(2)(6)(5)(5)数据结构教程 第九课 循环链表与双向链表 - 数据结构与算法 - 编程入门网
数据结构教程 第九课 循环链表与双向链表
本课主题: 循环链表与双向链表
教学目的: 掌握循环链表的概念,掌握双向链表的的表示与实现
教学重点: 双向链表的表示与实现
教学难点: 双向链表的存储表示
授课内容:
一、复习线性链表的存储结构
二、循环链表的存储结构
循环链表是加一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。
循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p-&next是否为空,而是它们是否等于头指针。
三、双向链表的存储结构
提问:单向链表的缺点是什么?
提示:如何寻找结点的直接前趋。
双向链表可以克服单链表的单向性的缺点。
在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。
1、线性表的双向链表存储结构
typedef struct DulNode{
struct DulNode *
struct DulNode *
}DulNode,*DuLinkL
对指向双向链表任一结点的指针d,有下面的关系:
d-&next-&priou=d-&priou-&next=d
即:当前结点后继的前趋是自身,当前结点前趋的后继也是自身。
2、双向链表的删除操作
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
p-&prior-&next=p-&
p-&next-&prior=p-&
return OK;
}//ListDelete_DuL
3、双向链表的插入操作
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR;
s-&data=e;
s-&prior=p-&
p-&prior-&next=s;
s-&next=p;
p-&prior=s;
return OK;
}//ListInsert_DuL
四、一个完整的带头结点的线性边表类型定义:
typedef struct LNode{
struct LNode *
typedef struct{
Link head,
Status MakeNode(Link &p,ElemType e);
//分配由p指向的值为e的结点,并返回OK;若分配失败,则返回ERROR
void FreeNode(Link &p);
//释放p所指结点
Status InitLinst(LinkList &L);
//构造一个空的线性链表L
Status DestroyLinst(LinkList &L);
//销毁线性链表L,L不再存在
Status ClearList(LinkList &L);
//将线性链表L重置为空表,并释放原链表的结点空间
Status InsFirst(Link h,Link s);
//已知h指向线性链表的头结点,将s所指结点插入在第一个结点之前
Status DelFirst(Link h,Link &q);
//已知h指向线性链表的头结点,删除链表中的第一个结点并以q返回
Status Append(LinkList &L,Link s);
//将指针s所指(彼此以指针相链)的一串结点链接在线性链表L的最后一个结点
//之后,并改变链表L的尾指针指向新的尾结点
Status Remove(LinkList &L,Link &q);
//删除线性链表L中的尾结点并以q返回,改变链表L的尾指针指向新的尾结点
Status InsBefore(LinkList &L,Link &p,Link s);
//已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之前,
//并修改指针p指向新插入的结点
Status InsAfter(LinkList &L,Link &p,Link s);
//已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之后,
//并修改指针p指向新插入的结点
Status SetCurElem(Link &p,ElemType e);
//已知p指向线性链表中的一个结点,用e更新p所指结点中数据元素的值
ElemType GetCurElem(Link p);
//已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值
Status ListEmpty(LinkList L);
//若线性链表L为空表,则返回TRUE,否则返回FALSE
int ListLength(LinkList L);
//返回线性链表L中的元素个数
Position GetHead(LinkList L);
//返回线性链表L中头结点的位置
Position GetLast(LinkList L);
//返回线性链表L中最后一个结点的位置
Position PriorPos(LinkList L,Link p);
//已知p指向线性链表L中的一个结点,返回p所指结点的直接前趋的值
//若无前趋,返回NULL
Position NextPos(LinkList L,Link p);
//已知p指向线性链表L中的一个结点,返回p所指结点的直接后继的值
//若无后继,返回NULL
Status LocatePos(LinkList L,int i,Link &p);
//返回p指示线性链表L中第i个结点的位置并返回OK,i值不合法时返回ERROR
Position LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType));
//返回线性链表L中第1个与e满足函数compare()判定关系的元素的位置,
//若下存在这样的元素,则返回NULL
Status ListTraverse(LinkList L,Status(*visit)());
//依次对L的每个元素调用函数visit()。一旦visit()失败,则操作失败。
五、总结本课内容
循环链表的存储结构
双向链表的存储结构2164人阅读
数据结构(20)
上篇文章,我们说明了一元多项式相加采取了什么形式和抽象定义数据类型定义以及实现一元多项式相加的方法,本节将用具体代码来实现一元多项式相加。
一元多项式表现形式
typedef struct{
}term,ElemT
typedef LinkList polynomial
部分算法描述
Status cmp(PElemType a, PElemType b) {
if (a.expn&=b.expn) return 1;
else return 0;
void CreatPolyn(PLinkList &P, int m) {
PLink h, q,
InitList(P);
h = GetHead(P);
e.coef = 0.0;
e.expn = -1;
SetCurElem(h, e);
for (i=1; i&=m; ++i) {
e.coef = (float)(random(1, 90) + random(10)/10.0);
if (random(2)) e.coef = -e.
e.expn=e.expn+random(1,10);
if (!LocateElem(P, e, q, cmp)) {
if (MakeNode(s,e)) InsFirst(q, s);
if(q==P.tail) P.tail=s;
} else i--;
Status PrintfPoly(PLinkList P) {
PLink q=P.head-&
while (q) {
if (fabs(q-&data.coef) & 0.005) {
if (i&0) {
if (q-&data.coef&0.005) printf(" + ");
else printf(" - ");
printf("%.2f", fabs(q-&data.coef));
} else printf("%.2f", q-&data.coef);
if (q-&data.expn&=1) printf("x");
if (q-&data.expn&1) printf("^%d", q-&data.expn);
if (++i % 6 == 0) printf("\n
printf("\n");
return OK;
int Compare(PElemType a, PElemType b) {
if (a.expn&b.expn) return -1;
if (a.expn&b.expn) return 1;
void AddPolyn(PLinkList &Pa, PLinkList &Pb) {
PLink ha,hb,qa,
PElemType a, b,
float sum;
ha = GetHead(Pa);
hb = GetHead(Pb);
qa = NextPos(Pa,ha);
qb = NextPos(Pb,hb);
while (qa && qb) {
a = GetCurElem (qa);
b = GetCurElem (qb);
switch (Compare(a,b)) {
qa = NextPos (Pa, qa);
sum = a.coef + b.
if (sum != 0.0) {
temp.coef=sum;
temp.expn=a.
SetCurElem(qa, temp) ;
DelFirst(ha, qa);
FreeNode(qa);
DelFirst(hb, qb);
FreeNode(qb);
qb = NextPos(Pb, hb);
qa = NextPos(Pa, ha);
DelFirst(hb, qb);
InsFirst(ha, qb);
qb = NextPos(Pb, hb);
ha = NextPos(Pa, ha);
if (!Empty(Pb)) Append(Pa, qb);
FreeNode(hb);
具体实现代码
代码实现第一种
可能略有不完善之处
第二种代码的实现(仅链表存储形式实现)
#include &iostream&
#include &cstdlib&
typedef struct{
}term, ElemT
typedef struct LNode{
struct LNode *
typedef struct{
Link head,
typedef LinkL
Status InitList(LinkList *L)
p = (Link)malloc(sizeof(LNode));
p-&next = NULL;
(*L).head = (*L).tail =
(*L).len = 0;
return OK;
return ERROR;
Status MakeNode(Link *p, ElemType e)
*p = (Link)malloc(sizeof(LNode));
return ERROR;
(*p)-&data =
return OK;
Status InsFirst(LinkList *L, Link h, Link s)
s-&next = h-&
if (h == (*L).tail)
(*L).tail = h-&
(*L).len++;
return OK;
Position GetHead(LinkList L)
Status SetCurElem(Link p, ElemType e)
return OK;
Status LocateElemP(LinkList L, ElemType e, Position *q, int(*compare)(ElemType, ElemType))
Link p = L.head,
} while (p && (compare(p-&data, e)&0));
if (!p || compare(p-&data, e)&0)
return FALSE;
return TRUE;
Status Remove_Polyn(LinkList *L, Link q)
while (h-&next != q)
if (q == L-&tail)
h-&next = q-&
return OK;
int cmp(term a, term b)
if (a.expn == b.expn)
return (a.expn - b.expn) / abs(a.expn - b.expn);
void CreatPolyn(polynomial &p,int m)
InitList(&p);
Link h = GetHead(p);
Position q,s;
e.coef = 0.0; e.expn = -1; SetCurElem(h, e);
for (int i = 1; i &= ++i)
cout && "第"&&i&&"项"&&"的系数:";
cout && "第" && i && "项" && "的指数:";
if (!LocateElemP(p, e,&q, cmp))
if (e.coef != 0)
if (MakeNode(&s, e))InsFirst(&p,q,s);
q-&data.coef = q-&data.coef + e.
if (q-&data.coef == 0)
Remove_Polyn(&p, q);
Status ListTraverse(LinkList L, void(*visit)(ElemType))
Link p = L.head-&
for (j = 1; j &= L. j++)
visit(p-&data);
cout && "\b ";
if (L.len == 0)
cout && "0";
return OK;
void visit(ElemType e)
if (e.coef & 0 && e.coef != 1 && e.expn != 0)
if (e.expn & 0)
cout && e.coef && "x^" && e.expn && "+";
cout && e.coef && "x^(" && e.expn && ")+";
else if (e.coef & 0 && e.expn != 0)
if (e.expn & 0)
cout && "(" && e.coef && ")x^" && e.expn && "+";
cout && "(" && e.coef && ")x^(" && e.expn && ")+";
else if (e.coef == 1 && e.expn != 0)
if (e.expn & 0)
cout && "x^" && e.expn && "+";
cout && "x^(" && e.expn && ")+";
else if (e.expn == 0 && e.coef != 0)
cout && e.coef&&"+";
cout && "";
Position NextPos(Link p)
return p-&
ElemType GetCurElem(Link p)
return p-&data;
Status DelFirst(LinkList *L, Link h, Link *q)
h-&next = (*q)-&
if (!h-&next)
(*L).tail =
(*L).len--;
return OK;
return FALSE;
void FreeNode(Link *p)
*p = NULL;
Status ListEmpty(LinkList L)
if (L.len)
return FALSE;
return TRUE;
Status Append(LinkList *L, Link s)
int i = 1;
(*L).tail-&next =
while (s-&next)
(*L).tail =
(*L).len +=
return OK;
void AddPolyn(polynomial &Pa, polynomial &Pb)
Position ha, hb, qa=NULL, qb=NULL;
ha = GetHead(Pa); hb = GetHead(Pb);
if (Pa.len != 0 && Pb.len != 0)
qa = NextPos(ha); qb = NextPos(hb);
while (qa && qb)
a = GetCurElem(qa);
b = GetCurElem(qb);
float sum;
switch (cmp(a, b))
qa = NextPos(ha);
sum = a.coef + b.
if (sum != 0)
qa-&data.coef = sum;
DelFirst(&Pa, ha, &qa);
FreeNode(&qa);
DelFirst(&Pb, hb, &qb);
qb = NextPos(hb);
qa = NextPos(ha);
DelFirst(&Pb, hb, &qb);
InsFirst(&Pa, ha, qb);
qb = NextPos(hb);
qa = NextPos(ha);
if (!ListEmpty(Pb))Append(&Pa, qb);
FreeNode(&hb);
if (Pa.len == 0)
if (Pb.len == 0)
int main()
cout && "***************************************************************************" &&
《数据结构》&C语言版本&严蔚敏 吴伟名 编著
编写年月2016年3月
编写者:YuYunTan
一元多项式相加
cout && "***************************************************************************" &&
polynomial A, B;
cout && "请输入第一个多项式的项数为:";
CreatPolyn(A, length);
cout && "PA(x) = ";
ListTraverse(A, visit);
cout && "请输入第二个多项式的项数为:";
CreatPolyn(B, length);
cout && "PB(x) = ";
ListTraverse(B, visit);
AddPolyn(A, B);
cout && "PA(x)+PB(x) = ";
ListTraverse(A, visit);
system("pause");
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:89805次
积分:1909
积分:1909
排名:千里之外
原创:91篇
评论:21条
(5)(2)(15)(1)(4)(1)(11)(21)(5)(5)(1)(4)(3)(1)(8)(5)

我要回帖

更多关于 firstresponderstatus 的文章

 

随机推荐