ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:564.58KB ,
资源ID:10718491      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10718491.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告 2.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告 2.docx

1、数据结构课程设计报告 2 编号 课程设计题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院 计算机科学与工程学院 专 业 计算机科学与技术 班 级 2011级 37-3班 学生姓名 XX 学 号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时 间 1、一元稀疏多项式计算器【实验内容】一元稀疏多项式计算器。【问题描述】设计一个一元稀疏多项式简单计算器。【需求分析】其基本功能包括:(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数

2、,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b;(4)多项式a和b相减,建立多项式a-b;(5)计算多项式在x处的值;(6)计算器的仿真界面(选做);【概要设计】-=ADT=- void input(Jd *ha,Jd *hb); /输入两个多项式 void sort(Jd *h); /用冒泡排序法对一个多项式进行降序排序 void sum(Jd *ha,Jd *hb); /多项式求和 void minus(Jd *ha,Jd *hb); /多项式相减 void output(Jd *h); /输出多项式 void operate(Jd *ha,Jd *hb); /对多项式进行操

3、作 int qiuzhi(int x,Jd *ha); /计算多项式在x处的值 void main(); 主函数【存储结构】typedef struct node /*定义多项式每一项*/ int e; /e为指数 float c; /c为系数 struct node *next; /next指向下一项dnode;【流程图】1 dnode *creat() /多项式的创建, 即输入两个多项式hwhile (项数next=h-next; h-next=p;继续输入return h;2. void sort(dnode *h) /采用冒泡法对链表每一项重新排序/while(p-next!=NULL

4、) p=p-next; /寻找尾结点pi=p;指向最后一次交换的位置,初值为表尾while(pi!=h-next) /外层循环,比较趟数for(p=h-next;p!=pi;p=p-next)内层循环,前后两两相比swap(p,q); pl=p; /调用交换函数pi=pl;3. dnode *operate(dnode *a,dnode *b) /稀疏多项式计算/ while(p&q)比较对应两项的指数x=p-c+q-c; if(fabs(x)next;q=q-next;if(x!=0) 将和链接到新的链表中 else if(p-eq-e)p链接到新的链表中,p后移,q不动else if(p-

5、ee)p链接到新的链表中,q后移,p不动+c-c;if(q!=NULL) t-next=q;+c-c;if(p!=NULL) t-next=p;+c-c;4. float qiuzhi(int x,dnode *h) /求多项式在x处的值 if(p=NULL) return 0;while(p) if(p-e=0) sum+=p-c;else sum+=(p-c)*(pow(x,p-e); p=p-next;return sum;【详细设计】源代码如下:#include#include#include#define NULL 0typedef struct node /*定义多项式每一项*/

6、int e; /e为指数 float c; /c为系数 struct node *next; /next指向下一项dnode;dnode *creat() /*用链表存放多项式*/ /多项式的创建, 即输入两个多项式 dnode *h,*p; int e,i,n; /n为多项式的项数 float c; /c为多项式的系数 h=(dnode *)malloc(sizeof(dnode); /分配头节点 h-next=NULL; do /当n为0或小于1时,则重新输入 printf(请输入多项式的项数n:); scanf(%d,&n); while(n1); for(i=1;ic=c;p-e=e;

7、 /将值传给data域 p-next=h-next;/用头插法建立链表 h-next=p; return h; /返回头结点void swap(dnode *p,dnode *q) /*交换p,q指针所指的指数和系数*/ float m; /中间变量 int n; /中间变量 n=p-e; /交换操作 p-e=q-e; q-e=n; m=p-c; p-c=q-c; q-c=m;void sort(dnode *h) /*采用冒泡法对链表每一项重新排序*/ dnode *pi,*pl,*p,*q; p=h-next; /p此时指向第一项 while(p-next!=NULL) p=p-next;

8、 /寻找尾结点 pi=p; /pi指向最后一次交换的位置,初值为表尾 while(pi!=h-next) /结点数大于1时 pl=h-next; /pl为中间变量,起传递地地址的作用 for(p=h-next;p!=pi;p=p-next) q=p-next; if(p-eq-e) swap(p,q); /调用交换函数 pl=p; pi=pl; /pi指向前一个结点 dnode *operate(dnode *a,dnode *b) /*稀疏多项式计算*/ int sel; float x; dnode *p1,*p2,*p,*t; /t为结果链表的表头 t=(dnode *)malloc(s

9、izeof(dnode); t-next=NULL; printf(-n); printf(| 请选择运算方式: |n); printf(| 1、多项式相加 |n); printf(| 2、多项式相减 |n); printf(| 0、退出! |n); printf(-n); printf(请选择:); scanf(%d,&sel); p1=a-next; p2=b-next; while(p1&p2) if(p1-e=p2-e) /指数相同 if(sel=1) x=p1-c+p2-c; /系数相加 else x=p1-c-p2-c; /系数相减 if(x!=0) p=(dnode *)mall

10、oc(sizeof(dnode); p-e=p1-e; p-c=x; p-next=t-next;/利用头插法将p结点插入t中 t-next=p; p1=p1-next; p2=p2-next; else if(p1-ep2-e) /p1的指数大于p2的指数 p=(dnode *)malloc(sizeof(dnode); p-e=p2-e; if(sel=1) p-c=p2-c; else p-c=(-1)*p2-c; p-next=t-next; t-next=p; p2=p2-next; else /p1的指数小于p2的指数 p=(dnode *)malloc(sizeof(dnode)

11、; p-e=p1-e; p-c=p1-c; p-next=t-next; t-next=p; p1=p1-next; while(p1!=NULL) /p2为空,p1不为空时 p=(dnode *)malloc(sizeof(dnode); p=p1; p1=p1-next; p-next=t-next; /把p1 放在结果链表后面 t-next=p; while(p2!=NULL) /p1为空,p2不为空时 p=(dnode *)malloc(sizeof(dnode); p-e=p2-e; if(sel=2) /如果选择的是2,则将p2中剩余的项的系数取其相反数 p-c=(-1)*p2-c

12、; else p-c=p2-c; p2=p2-next; p-next=t-next; /把p1 放在结果链表后面 t-next=p; return t; /返回运算后的多项式的头结点void prn(dnode *h)/打印结果 dnode *p; p=h-next; if(p=NULL) /如果多项式项数为0 printf(多项式项数为0,退出!n); exit(0); printf(生成的多项式如下:n); while(p-next)!=NULL) /否则,则输出 printf(%3.1f X%d + ,p-c,p-e); p=p-next; if(p-next=NULL) printf

13、(%3.1f X%dn,p-c,p-e); float qiuzhi(int x,dnode *h) /求多项式在x处的值 dnode *p; float sum=0; int i,t; printf(请输入x的值:); scanf(%d,&x); for(p=h-next;p;p=p-next) t=1; for(i=p-e;i!=0;) if(ic*t; return sum;void main() int x; float sum=0; dnode *a,*b,*c; a=creat(); /第一个多项式 sort(a); /排序 prn(a); /打印结果 b=creat(); /第二

14、个多项式 sort(b); /排序 prn(b); /打印结果 c=operate(a,b); /结果多项式 prn(c); /打印 sum=qiuzhi(x,c); printf(多项式的值为:%.3f,sum); printf(n);【运行结果及分析】 (1)输入多项式: (2)输出多项式(多项式格式为:c1xe1+c2xe2+cnxen):(3)实现多项式a和b相加:(4)实现多项式a和b相减:(5)计算多项式在x处的值:2、模拟浏览器操作程序【实验内容】模拟浏览器操作程序【问题描述】标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后

15、退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。【需求分析】需要支持以下指令:BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。QUIT:退出浏览器。假设浏览器首先加载的网页URL是:http:/www.acm.org/。【概要设计】-=ADT=-typedef struct stacknodevoid push(sta

16、cknode *top, string e) /进栈string pop(stacknode *top) /出栈void InitStack(stacknode *top) /栈的初始化int getempty(stacknode *top)int main() 【存储结构】typedef struct stacknode char data70; struct stacknode *next;stacknode;【流程图】【详细设计】源代码如下:#include /C+文件输入输出流#include /字符串操作#include /C+标准输入输出#include /实现将char转换成st

17、ring的功能头文件using namespace std;typedef struct stacknode char data70; struct stacknode *next;stacknode;void push(stacknode *top, string e) /进栈 stacknode *q; q=(stacknode*)malloc(sizeof(stacknode); strcpy(q-data,e.c_str(); /e.c_str()库函数实现将string类型的e转换成char类型 q-next=top-next; /strcpy库函数实现将转换后的e.str()复制到

18、q-data中 top-next=q;string pop(stacknode *top) /出栈 stacknode *p; char e70; if(top-next=NULL) return NULL; else p = top-next; top-next = p-next; strcpy(e,p-data); free(p); strstream s; /将char类型的e转换成string类型的a,s是strstream的对象 sa; return a; void InitStack(stacknode *top) /栈的初始化 top-next = NULL; /初始化为一个带有

19、头结点的链栈,头结点的数据域没有值int getempty(stacknode *top) /判断栈是否为空 if(top-next=NULL) return 1; else return 0;int main() stacknode *fls, *bls; /fls指向前进栈,bls指向后退栈 fls=(stacknode*)malloc(sizeof(stacknode); /分别开辟结点 bls=(stacknode*)malloc(sizeof(stacknode); InitStack(fls); /分别初始化 InitStack(bls); /用C+读取文件,代码比C语言要简单方便

20、很多,但是效率稍低 ifstream fin(input.txt); /C+的文件输入流,从硬盘读到内存,fin是自己定义的名字,可以随便更改成别的名字 ofstream fout(output.txt); /C+的文件输出流,从内存写到硬盘,fout也是自己定义的名字,可以随便更改成别的名字 string URL = http:/www.acm.org/; /将初始加载的网页赋值给URL,是string类型 string demand; /*关于为何使用string的说明:*/ cout程序从input.txt文件读取测试数据endl; /*C语言只提供了char类型来处理字符,对于字符串只

21、能用字符数组,很不方便*/ cout测试输出保存在output.txt文件中demand; /先将第一个字符串读取到string类型的demand变量中,fin读取会忽略空格,遇空格停止 if(demand=VISIT) /如果读到VISIT则执行题目要求的相应操作 push(bls,URL); /将当前页推到后退栈 finURL; /将当前页推到后退栈后,接着读取VISIT后面的网址 foutURLendl; /将当前页输出到文件中 InitStack(fls); /清空前进栈 if(demand=BACK) /如果独到BACK if(getempty(bls) /判断后退栈如果为空则输出I

22、gnored到文件中 foutIgnoredendl; continue; /Ignored说明忽略这条命令,则结束本次循环 push(fls,URL); /否则将当前页推到前进栈 URL = pop(bls); /取出后退栈中顶端的页面,使它成为当前页 foutURLendl; /将当前页写入到文件 if(demand=FORWARD) /如果独到FORWARD if(getempty(fls) /如果前进栈是空的,则输出Ignored到文件中 foutIgnoredendl; continue; /Ignored说明忽略这条命令,则结束本次循环 push(bls,URL); /否则将当前页

23、推到后退栈 URL = pop(fls); /取出前进栈中顶端的页面,使它成为当前页 foutURLendl; /将当前页写入到文件 if(demand=QUIT) /如果读到QUIT,则退出程序 exit(1); return 0;【运行结果及分析】(1)运行程序界面:(2)input与output文件截图:3、背包问题的求解【实验内容】背包问题的求解。【问题描述】假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+wm=T,要求找出所有满足上述条件的解。 例如:当T=10,各件物品的体积1,8,4,3,5,2时,可

24、找到下列4组解: (1,4,3,2) (1,4,5) (8,2) (3,5,2)。【概要设计】 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后,顺序选取物品装入背包,若已选取第i件物品后未满,则继续选取第i+1件,若该件物品“太大”不能装入,则弃之,继续选取下一件,直至背包装满为止。 如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入的物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直到求得满足条件的解,或者无解。由于回溯求解的规则是“后进先出”,自然要用到“栈”。【存储结构】struct stacks /定义一个顺序栈结构 i

25、nt datasize; int top;stack;【流程图】输入预期总体积T输入各物体体积输入是否为0结束计算总体积sumsum是否等于T是否否 输出解是 【详细设计】源代码如下:#include #define size 100struct stacks /定义一个顺序栈结构 int datasize; int top;stack;void bag(int V,int wsize,int number) /向背包中装入物品 int i=0,j=1,k=0,c=0; /c为背包装满与否的标志 stack.top=0; /将顺序栈置空 do while(V0&k=wk) stack.datastack.top=k; /将符合条件的物品的下标入栈 stack.top+; /栈顶元素的位置后移 V-=wk; /计算

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1