数据结构课程设计(共35页).docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构课程设计(共35页).docx》由会员分享,可在线阅读,更多相关《数据结构课程设计(共35页).docx(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上教学单位计算机与信息科学学院学生学号 7数据结构(课程设计)学生姓名专业名称软件工程指导教师2016年5月28日专心-专注-专业目录1多项式的基本运算1.1 实验目的掌握线性表的链式存储结构和线性表的典型应用多项式求和、差运算,通过实验进一步加深对线性表的存储结构的理解与熟悉。1.2 实验内容链式存储结构的实现:已知:f(x)=100x100+5x50-30x10+10, g(x)=150x90-5x50+40x20+20x10+3x,求和与差。解题思路:定义一个结构体数组,p存储系数,q存储指数。分别输出两次输入的多项式。将两次输入的多项式的指数按从大到小的顺序进行
2、排列,同时相应的系数要进行交换。输出时如果进行如果当前该项与下一项的的系数相同,将两项系数相加后输出,并跳过下一项,如果不相等,直接输出。输出时需注意的问题:当系数为0时,该项不输出当系数为负数时,不要再在前面输出+。1.3实验方法#include #include #define MAX 20 /多项式最多项数typedef struct /定义存放多项式的数组类型 double coef; /系数 int exp; /指数 PolyArray;typedef struct pnode /定义单链表结点类型,保存多项式中的一项,链表构成多项式 double coef; /系数 int exp
3、; /指数struct pnode *next; PolyNode;void DispPoly(PolyNode *L) /输出多项式 bool first=true; /first为true表示是第一项 PolyNode *p=L-next;while (p!=NULL) if (first)first=false;else if (p-coef0)printf(+);if (p-exp=0)printf(%g,p-coef);else if (p-exp=1)printf(%gx,p-coef);elseprintf(%gx%d,p-coef,p-exp); p=p-next; print
4、f(n);void DestroyList(PolyNode *&L) /销毁单链表 PolyNode *p=L,*q=p-next;while (q!=NULL) free(p); p=q; q=p-next; free(p);void CreateListR(PolyNode *&L, PolyArray a, int n) /尾插法建表 PolyNode *s,*r;int i; L=(PolyNode *)malloc(sizeof(PolyNode); /创建头结点 L-next=NULL; r=L; /r始终指向终端结点,开始时指向头结点for (i=0; icoef=ai.coe
5、f;s-exp=ai.exp; r-next=s; /将*s插入*r之后 r=s; r-next=NULL; /终端结点next域置为NULLvoid Sort(PolyNode *&head) /按exp域递减排序 PolyNode *p=head-next,*q,*r;if (p!=NULL) /若原单链表中有一个或以上的数据结点 r=p-next; /r保存*p结点后继结点的指针 p-next=NULL; /构造只含一个数据结点的有序表 p=r;while (p!=NULL) r=p-next; /r保存*p结点后继结点的指针 q=head;while (q-next!=NULL & q
6、-next-expp-exp) q=q-next; /在有序表中找插入*p的前驱结点*q p-next=q-next; /将*p插入到*q之后 q-next=p; p=r; void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc) /求两有序集合的并,完成加法 PolyNode *pa=ha-next,*pb=hb-next,*s,*tc;double c; hc=(PolyNode *)malloc(sizeof(PolyNode); /创建头结点tc=hc;while (pa!=NULL & pb!=NULL) if (pa-exppb-exp)
7、s=(PolyNode *)malloc(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=pa-coef;tc-next=s;tc=s;pa=pa-next; else if (pa-expexp) s=(PolyNode *)malloc(sizeof(PolyNode); /复制结点s-exp=pb-exp;s-coef=pb-coef;tc-next=s;tc=s;pb=pb-next; else /pa-exp=pb-exp c=pa-coef+pb-coef;if (c!=0) /系数之和不为0时创建新结点 s=(PolyNode *)mallo
8、c(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=c;tc-next=s;tc=s; pa=pa-next;pb=pb-next; if (pb!=NULL) pa=pb; /复制余下的结点while (pa!=NULL) s=(PolyNode *)malloc(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=pa-coef;tc-next=s;tc=s;pa=pa-next; tc-next=NULL;/*void minus(PolyNode *ha,PolyNode *hb,PolyNode *&hc) /求
9、两有序集合的并,完成减法 PolyNode *pa=ha-next,*pb=hb-next,*s,*tc;double c; hc=(PolyNode *)malloc(sizeof(PolyNode); /创建头结点tc=hc;while (pa!=NULL & pb!=NULL) if (pa-exppb-exp) s=(PolyNode *)malloc(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=pa-coef;tc-next=s;tc=s;pa=pa-next; else if (pa-expexp) s=(PolyNode *)malloc
10、(sizeof(PolyNode); /复制结点s-exp=pb-exp;s-coef=pb-coef;tc-next=s;tc=s;pb=pb-next; else /pa-exp=pb-exp c=pa-coef-pb-coef;if (c!=0) /系数之和不为0时创建新结点 s=(PolyNode *)malloc(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=c;tc-next=s;tc=s; pa=pa-next;pb=pb-next; if (pb!=NULL) pa=pb; /复制余下的结点while (pa!=NULL) s=(Poly
11、Node *)malloc(sizeof(PolyNode); /复制结点s-exp=pa-exp;s-coef=pa-coef;tc-next=s;tc=s;pa=pa-next; tc-next=NULL;/*int main() PolyNode *ha,*hb,*hc; PolyArray a= 100,100,5,50,3,10,10,0; PolyArray b= 150,90,5,50,40,20,20,10,3,1;CreateListR(ha,a,4);CreateListR(hb,b,5); printf(原多项式A: );DispPoly(ha); printf(原多项式
12、B: );DispPoly(hb);Sort(ha);Sort(hb); printf(有序多项式A: );DispPoly(ha); printf(有序多项式B: );DispPoly(hb);Add(ha,hb,hc); printf(多项式相加: );DispPoly(hc);DestroyList(hc);minus(ha,hb,hc);printf(多项式相减:);DispPoly(hc);DestroyList(ha);DestroyList(hb);DestroyList(hc);return 0;1.4实验结果1.5 小结这次实验让我进一步对线性表的存储结构有了更深层次的理解,
13、对解决问题的方法有了更多的认识2栈的应用逆波兰式求值2.1 实验目的掌握栈的特点及其描述方法;掌握栈的各种基本操作;掌握栈的一个经典应用-逆波兰式求值问题。2.2 实验内容从键盘敲入一个整数表达式,先将其转化为逆波兰表达式,再计算值。解题思路:逆波兰式又叫后缀表达式,规定把运算符号放在两个操作数的后面。在后缀表达式中,不存在运算符的优先级问题,也不存在任何括号。后缀表达式求值的步骤:1.初始化一个空操作数栈;2.从前到后读取后缀表达式字符。如果是操作数直接入栈。如果读到一个操作符,弹出栈顶元素a和新的栈顶元素b,执行b a,将结果压入栈中;3.最后栈中只剩下一个元素,即表达式的值。2.3实验方
14、法源代码如下:#include#includetypedef structchar s2020;int top;SQ;void copystr(char *a,char *b)int i=0;do bi=ai;i+; while(ai!=0);bi=0;void voidSQ(SQ *s) s-top=-1;int ifempty(SQ *s) return(s-top=-1);void push(SQ *S,char *c)if(S-top=19)printf(over flown);else S-top+;copystr(c,S-sS-top); char *pop(SQ *S)if(if
15、empty(S) printf(over flow!n);return(NULL); elsereturn(S-sS-top-);int judge(char *c) if(c1=0)switch(c0) case +:return(3);case -:return(3);case *:return(2);case /:return(2);default:return(1); elsereturn(1);void write(char *a,char *b,char *c)strcat(a,c);strcat(a,b);int seek(char *c,int start)int signal
16、=1;for(start=start+;cstart!=0&signal!=0;start+) if(cstart=)signal-;else if(cstart=()signal+; if(signal=0)return(start-1);else printf(输入无效式子n);return(-1); void FB(SQ *A,SQ *B)for(;!ifempty(A);) push(B,A-sA-top);pop(A); char *rewrite(char *A) SQ front; SQ back;int i,j,k,flag=0;char *result;char mid20;
17、voidSQ(&front);voidSQ(&back);for(i=0;Ai!=0;) if(Ai=() j=seek(A,i);for(k=i+1;k=2;) flag=0;for(i=0;i=2;) if(judge(front.sfront.top)=1&judge(front.sfront.top-1)=2&judge(front.sfront.top-2)=1) write(front.sfront.top,front.sfront.top-1,front.sfront.top-2);push(&back,front.sfront.top);pop(&front);pop(&fro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 35
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内