数据结构课程设计(一元多项式)

数据结构课程设计(一元多项式)
数据结构课程设计(一元多项式)

目录

一、问题描述 (1)

二、测试数据 (1)

三、算法思想 (1)

四、模块划分 (1)

五、数据结构 (2)

六、源程序 (2)

七、测试情况............................................... 错误!未定义书签。

八、设计体会 (9)

参考文献 (10)

一、问题描述

(1)建立两个链表存放一元多项式,输入指数与系数,建立一元多项式,将一元多项式输入并存储在内存中。

(2)完成两个多项式的加减乘法运算。

(3)通过主函数输出一元多项式及运算结果。

二、测试数据

第一个多项式f(x)=x^2+2*x^3+3*x^5

第二个多项式g(x)=5*x^3+6*x^4+7*x^5

三、算法思想

一元多项式运算的实现主要通过单链表的基本操作实现。

一般情况下的一元n次多项式可写成Pn(x)=p1x^e1+p2^e2+…+pm^em,用一个长度为没m且每个元素有两个数据项(系数与指数项)的线性表((p1,e1),(p2,e2)…(pm,em))便可以唯一确定一个多项式Pm。根据一元多项式相加的运算规则,对于两个一元多项式中所有指数相同的项,对应系数相加。若其和不为0则作为“和多项式”中的一项插入到“和多项式”的链表中;对于两个一元多项式中指数不相同的项,则将指数小的插入到“和多项式”链表中去。“和多项式”链表中的结点无需生成,而应从两个多项式中摘取。而多项式的减法和乘法都可以在假发的基础上完成。减法即把其中一个多项式的系数变为负数,乘法可分解为一系列的加法运算。

四、模块划分

(1)定义一元多项式的节点类型,包括数据域和指针域,其中数据域含有浮点型的系数coef和整型的指数expn;

(2)void insert(NODE *pa,NODE *pb),函数功能是查找位置插入新结点,并使结点按指数大小按从大到小顺序排列,指数相等则合并;

(3)NODE *creat(char ch),函数功能是输入多项式。首先创建新链表,并生成结点,通过分别输入指数和系数形成一元多项式。创建多项式成功则返回由结点组成的式子;

(4)NODE *add(NODE *p,NODE *q),函数功能是实现多项式的相加。链表不空时,不断生成新结点,并把第二个多项式的结点合并到第一个多项式中,按指数从大到小顺序排列相同系数相加原则实现两个式子相加;

(5)NODE *minus(NODE *p,NODE *q),函数功能是实现多项式的相减。参照多项式相加的思想,把第

二个式子的系数变为它们的相反数,按相同原则将第二个式子加到第一个式子中;

(6)NODE *multi(NODE *pa,NODE *pb),函数功能是实现多项式的相乘。创建新链表,生成新结点,第一个式子中的每一项都与第二个式子中每一项系数相乘指数相加,直到两个式子中的结点都运算完毕,返回新链表;

(7)void output(NODE *f),函数功能是输出多项式。把运算完毕的新的多项式按结点依次输出,其中,若结点系数为正数则用+连接前后两个结点,若为负数则用-连接,系数为0则不输出指数;(8)void main(),主函数,通过输入数字选择不同的操作。当case语句为不同情况时分别调用三个不同的函数。

五、数据结构

(1)带头结点单链表抽象数据类型SqList

(2)带头结点单链表抽象数据类型的结点结构定义如下:

typedef struct node

{

float coef;

int expn;

struct node * next;

}NODE;

六、源程序

#include

#include

#include

using namespace std;

typedef struct node

{ //定义节点类型

float coef;

int expn;

struct node * next;

}NODE;

void start()//用户选择界面

{

cout<

cout<<" ========================\n";

cout<<" 两个一元多项式的相加、相乘、相减:\n";

cout<<" ===========================\n";

cout<<"请选择操作:\n";

cout<<" ~~~~~~~~~~~~~~~~0.退出~~~~~~~~~~~~~~~\n"; cout<<" ********1.两个一元多项式相加*********\n";

cout<<" ********2.两个一元多项式相乘*********\n";

cout<<" ********3.两个一元多项式相减*********\n";

}

void insert(NODE *pa,NODE *pb)//查找位置插入新结点

{

NODE *p,*q;

int flag=0;

p=pa;//p定义为现在的前一个结点

if(p->next==NULL) {p->next=pb;}

else {q=p->next;

while(flag==0)

{

if(pb->expnexpn)//当新结点指数小于现在的结点指数连接时向后移一个位置{

if(q->next==NULL)

{

q->next=pb;

flag=1;

}

else

{

p=q;

q=p->next;

}

}

else

if(pb->expn>q->expn)//如果发现比现在的结点指数大了就插入到这个结点的前面{

pb->next=q;

p->next=pb;

flag=1;

}

else

{ //指数相等时则对应系数相加

q->coef=q->coef+pb->coef;

flag=1;

delete pb; //把被合并后的那个结点删除

if(q->coef==0)

{

p->next=q->next;

delete q; }

}

}

}

}

NODE *creat(char ch)//输入多项式

{

NODE *h,*i;

float x;

int y;

h=new NODE;//创建链表头

h->next=NULL;//创建空链表

cout<<"请输入一元多项式的系数指数;以0 0 结束!)\n"; cin>>x;

cin>>y;;

while(x!=0)

{

i=new NODE;;//创建新结点

i->coef=x;

i->expn=y;

i->next=NULL;

insert(h,i);//就查找位置并且插入新结点

cout<<"输入一元多项式的下一项:(以0 0 结束!)\n"; cin>>x;

cin>>y;;

}

return h;

}

NODE *add(NODE *p,NODE *q)//多项式相加

{

NODE *s;

while(q->next!=NULL) //链表不空时

{ q=q->next;

s=new NODE;//创建新结点

s->coef=q->coef;//把第二个式子的指数与系数赋给S

s->expn=q->expn;

s->next=NULL;//置尾标志

insert(p,s);

}//把当前第二个式子的结点插入到第一个式子中

return p;

}

NODE *minus(NODE *p,NODE *q)//多项式相减

{

NODE *s;

while(q->next!=NULL)

{

q=q->next;

s=new NODE;//创建新结点

s->coef=0-q->coef;

s->expn=q->expn;

s->next=NULL;

insert(p,s); //把当前第二个式子的结点插入到第一个式子中}

return p;

}

NODE *multi(NODE *pa,NODE *pb)//多项式相乘

{

NODE *s,*r,*p;

int flag=0;

r=new NODE;//创建链表头

r->next=NULL;

pa=pa->next;

p=pb;

while(flag==0)

{

if(p->next==NULL)

{

p=pb;//当现在指向空时跳出循环

pa=pa->next;

continue;

}

if(pa==NULL)

{

flag=1;//当现在指向空时跳出循环

continue;

}

p=p->next;

s=new NODE;//创建新结点

s->coef=p->coef*pa->coef;

s->expn=p->expn+pa->expn;

s->next=NULL;

insert(r,s);//把当前第二个式子的结点插入到第一个式子中}

return r;

}

void output(NODE *f)//输出多项式

{

NODE *p;

int flag=0;

p=f->next;//依次输出结点

if(f->next==NULL)//如果函数为空输出0

{cout<<"0"<

}

while(flag==0)

{

if(p->coef>0&&f->next!=p)

cout<<"+";//为正数时用"+"号将相邻结点连接

if(p->coef==1);//如果为"1"就不用打印系数了

else if(p->coef==-1)

cout<<"-";//如果为"-1"用"-"号连接

else

cout<coef;//其余情况都得打印

if(p->expn!=0) printf("x^%d",p->expn);//如果指数为"0"不打印指数项else if((p->coef==1)||(p->coef==-1))

cout<<"1";

if(p->next==NULL)

flag=1;//如果现在的链节没有下一个就结束

else

p=p->next;

}

cout<

}

void main()

{

NODE *f,*g;//用f(x)、g(x)存放两个一元多项式

int i;//设置标志

cout<<"输入0-3选择操作";

start();

while(i)

{

cin>>i;

switch(i)

{

case 0:

break;//退出

case 1:

{

cout<<"多项式相加:\n";

f=creat('f');//输入多项式f(x) cout<<"f(x)=";

output(f);

g=creat('g');//输入多项式g(x) cout<<"g(x)=";

output(g);

cout<<"F(x)=f(x)+g(x)=";

f=add(f,g);//调用相加函数output(f);

start();//回复用户选择界面break;

}

case 2:

{

printf("多项式相乘:\n");

f=creat('f');//输入多项式f(x) printf("f(x)=");

output(f);

g=creat('g');//输入多项式g(x) printf("g(x)=");

output(g);

printf("F(x)=f(x)*g(x)=");

f=multi(f,g);//两个多项式相乘output(f);

start();//回复用户选择界面break;

}

case 3:

{

printf("多项式相减:\n");

f=creat('f');//输入多项式f(x) printf("f(x)=");

output(f);

g=creat('g');//输入多项式g(x) printf("g(x)=");

output(g);

printf("F(x)=f(x)-g(x)=");

f=minus(f,g);//两个多项式相减output(f);

start();//回复用户选择界面break;

}

default:

{

cout<<"输入有误!请重新选择操作!\n";//选择错误,返回选择界面start();

break;

}

}

}

}

七、测试情况

八、设计体会

通过这次课程设计,我对数据结构中链表方面的知识掌握地更加熟练,包括单链表抽象数据类型的定义,用尾插入法建立链表,以及通过一系列的单链表插入操作实现两个链表的合并和链表的排序。同时,对直接插入排序算法的算法思想有了进一步的理解。

此外,这也提升了自己用C语言来解决实际问题的能力,对所学到的知识达到活学活

用。

同时,也要认识到自己的不足之处:在实现链表的排序时,由于链表定义的是单链表,在进行直接插入排序时,时间复杂度很大,所以我是先将链表转化为数组,对数组进行排序后再转化为链表。如果把链表定义为双向链表,则可以实现程序的优化。

参考文献

[1]温海,张友等.《C语言版精彩编程百例》.北京:中国水利出版社,2004.

[2]严蔚敏,李冬梅等.《数据结构实验教程(C语言版)》.北京:人民邮电出版社,2010.

数据结构课程设计参考题目

数据结构课程设计题目 数据结构课程设计题目(大题目).doc 一、公司销售管理系统 项目开发基本要求 1.客户信息管理:对客户的基本信息进行添加、修改和删除。 2.产品信息管理:对产品的基本信息进行添加、修改和删除。 3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。 4.订单信息管理:对订单的基本信息进行添加、修改和删除。 二、高校科研管理系统 系统主要用于帮助高校或科研单位管理和维护各项科研相关资料 项目开发基本要求 1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;范围包括:分为全国、国际、地方三种情况;检索源包括:分为EI、SCI、核心和一般四种情况。 3.项目参加人员管理模块包括:显示添加修改删除查询。 4.项目基本情况模块包括:显示添加修改删除查询。 5.项目获奖情况模块包括:显示添加修改删除查询。 6.期刊论文管理模块包括:显示添加修改删除查询。 7.著作管理模块包括:显示添加修改删除查询。 8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。 9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。 三、网络五子棋对战 四、不同排序算法模拟 五、科学计算器 数据结构课程设计题目 1.运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n< =20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

数据结构课程设计报告一元多项式的计算

数据结构课程设计报告题目:一元多项式计算 院(系):计算机与信息科学学院 专业:软件工程 班级:软件1202班 学号:02 05 40 姓名:陈潇潇刘敏易庆鹏 指导教师:彭代文 2013年12月

目录 一、课程设计介绍 ........................错误!未定义书签。 1.1课程设计目的 (3) 1.2课程设计内容 (3) 1.2课程设计要求 (3) 二、需求设计 ............................错误!未定义书签。 2.1课设题目粗略分析 (3) 2.2原理图介绍.......................... 错误!未定义书签。 2.2.1 功能模块图...................... 错误!未定义书签。 2.2.2 流程图分析 (4) 三、需求分析 .............................错误!未定义书签。 3.1存储结构 (5) 3.2算法描述 (6) 四、调试与分析 ...........................错误!未定义书签。(1)调试过程 .......................... 错误!未定义书签。(2)程序执行过程...................... 错误!未定义书签。参考文献.................................错误!未定义书签。总结.....................................错误!未定义书签。附录(关键部分程序清单)...............错误!未定义书签。

一、课程设计介绍 1.1课程设计目的 ⑴熟悉使用c语言编码程序,解决实际问题; ⑵了解数据结构与算法的设计方法,具备初步的独立分析和设计能力。 ⑶初步掌握软件开发过程的分析能力,系统设计,程序编码,测试等基本能力。 ⑷提高综合运用的能力,运用所学理论知识与独立分析能力。 1.2课程设计内容 一元多项式计算 任务:⑴能够按照指数降序排列建立并输出多项式 ⑵能够完成两个多项式的相加,并将结果输入 ⑶在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法 1.3课程设计要求 ⑴学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。 ⑵学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。 ⑶课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时。 ⑷课程设计在期末考试之前交。最好一起上交。 ⑸同班同学之间最好不要相同。源代码可以打印,但是下面模块要求的内容必须手写。 二、需求设计 2.1 课设题目粗略分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果

数据结构课程设计多项式运算

#include #include #include"malloc.h" #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 typedef int Status; typedef struct ElemType{ float coef; //多项式系数 int exp; //多项式指数 }ElemType;//数据类型 typedef struct Polynomial{ ElemType data; struct Polynomial *next; }*Polyn,Polynomial;//多项式结构体 void Insert(Polyn p,Polyn head) { /*将新的结点插入链表,如果系数为零,则释放该结点; 如果指数为新时将结点直接插入;否则查找插入位置, 方法:比较该结点指数与首元结点及其他结点的指数, 直到该结点指数大于等于链表内某结点的指数,相等则合并这两项;大于则插入到其前驱*/ if(p->data.coef==0) {free(p);p=NULL;} //如果插入项的系数为零时,释放其结点将其删除

else { Polyn q1,q2; q1=head; q2=head->next; while(q2&& p->data.exp < q2->data.exp) { //查找多项式某项的插入位置,使多项式按指数降幂排列 q1=q2; q2=q2->next; } if(q2&& p->data.exp == q2->data.exp) { //将多项式指数相同相进行合并 q2->data.coef += p->data.coef; free(p); if(!q2->data.coef) { //如果多项式的系数为零的话,将其删除即释放期结点 q1->next=q2->next; free(q2); } } else { //如果是新建的多项式,指数为新时将结点插入 p->next=q2; q1->next=p; } } }

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

数据结构中实现一元多项式简单计算

数据结构中实现一元多项式简单计算: 设计一个一元多项式简单的计算器。 基本要求: 一元多项式简单计算器的基本功能为: (1)输入并建立多项式; (2)输出多项式; (3)两个多项式相加,建立并输出和多项式; (4)两个多项式相减,建立并输出差多项式; #include #include #define MAX 20 //多项式最多项数 typedef struct//定义存放多项式的数组类型 { float coef; //系数 int exp; //指数 } PolyArray[MAX]; typedef struct pnode//定义单链表结点类型 { float coef; //系数 int exp; //指数 struct pnode *next; } PolyNode; void DispPoly(PolyNode *L) //输出多项式 { PolyNode *p=L->next; while (p!=NULL) { printf("%gX^%d ",p->coef,p->exp); p=p->next; } printf("\n"); } 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;i

数据结构-多项式

一.实验目的: 理解线性表的基本逻辑结构,完成链表及循环链表的实现 通过实验进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力,熟练掌握链表的实际应用。 二.实验内容: 题目:一元多项式运算 问题描述: 设计算法实现一元多项式的简单运算。 基本要求: (1)输入并建立多项式; (2)输出多项式; (3)多项式加法 (4)多项式减法。 测试数据: (1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (2)(6x-3-x+4.4x2-1.2x9)-(―6x―3-+5.4x2-x2+7.8x15) =(―7.8x15―1.2x9+12x―3―x) (3)(1+x+x2+x3+x4+x5)+(―x3―x4)=(1+x+x2+x5) (4)(x+x3)+(―x―x3)=0 (5)(x+x100)+(x100+x200)=(x+2x100+x200) (6)(x+x2+x3)+0=x+x2+x3 三. 实验方案(程序设计说明)

(一)算法设计思路: 1.将两个多项式的系数和指数分别存放在新建的两个链表中; 2.其中一个链表A的指针不动,遍历另一个链表B,指数相等 时系数相加,删除该数,链表B从头开始,链表A移向下个 数据域; 3.直到链表B为空或者链表A遍历完成结束。 (二)算法流程图:

(三)界面设计说明: 请输入多项式的长度: 开始 输入多项式长 度N 以及系数 m,指数n A →n= B →n? Y N j++ 系数相加存放在A 表 i++ 结束 创建链表A ,B ,链表A 从i=0 开始循环,链表B 从j=0开始 i>N? N Y i>N? N Y

数据结构课程设计独立题目

题目2:运动会分数统计 1.问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 2.功能要求 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分; 3)可以按学校编号、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 。 题目6:哈夫曼编/译码器 1.问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。 2.功能要求 I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。 E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree 中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile 中。 D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。 T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint 中。 题目9:构造可以使n个城市连接的最小生成树 1.问题描述 给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。 2.功能要求 城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

数据结构一元多项式的加减乘

#ifndef _POL YNOMIAL_H #define _POL YNOMIAL_H #include using namespace std; #include //#define ElemType char typedef struct // 项的表示,多项式的项作为LinkList的数据元素 { float coef; // 系数 int expn; // 指数 }term, ElemType; typedef struct LNode // 结点类型 { ElemType data; struct LNode *next; }LNode,*Link,*Position; typedef struct LinkList // 链表类型 { Link head,tail; // 分别指向线性链表中的头结点和最后一个结点 int len; // 指示当前线性链表中数据元素的个数 }LinkList; typedef LinkList polynomial; void InitList(LinkList &P); void CreatPolyn(polynomial &P,int m); void DestroyPolyn(polynomial &P); void CreatePolyn(polynomial &P,int m);//建立表示一元多项式的有序链表P void DestroyPolyn(polynomial &P);//销毁一元多项式P void PrintPolyn(polynomial P);//打印 int PolyLength(polynomial P);//项数 void AddPolyn(polynomial &Pa,polynomial &Pb);//相加运算 void SubtractPolyn(polynomial &Pa,polynomial &Pb);//相减运算 void MultiplyPolyn(polynomial &P,polynomial &Pa,polynomial &Pb);//相乘运算 int cmp(term a,term b);//依a的指数值<(或=)(或>)b的指数值,分别返回-1,0,+1 int LocateElemP(LinkList L,ElemType e,Position *q, int(*compare)(ElemType,ElemType)); int MakeNode(Link *p,ElemType e); int InsFirst(LinkList *L,Link h,Link s);

数据结构一元多项式的计算

课程设计成果 学院: 计算机工程学院班级: 13计科一班 学生姓名: 学号: 设计地点(单位): 设计题目:一元多项式的计算 完成日期:年月日 成绩(五级记分制): _________________ 教师签名:_________________________ 目录 1 需求分析 ......................................................................... 错误!未定义书签。 2 概要设计 ......................................................................... 错误!未定义书签。 2.1一元多项式的建立 ............................................................... 错误!未定义书签。 2.2显示一元多项式 ................................................................... 错误!未定义书签。 2.3一元多项式减法运算 ........................................................... 错误!未定义书签。 2.4一元多项式加法运算 ........................................................... 错误!未定义书签。 2.5 设计优缺点.......................................................................... 错误!未定义书签。3详细设计 .......................................................................... 错误!未定义书签。 3.1一元多项式的输入输出流程图........................................... 错误!未定义书签。 3.2一元多项式的加法流程图................................................... 错误!未定义书签。 3.3一元多项式的减法流程图.................................................. 错误!未定义书签。 3.4用户操作函数....................................................................... 错误!未定义书签。4编码 .................................................................................. 错误!未定义书签。5调试分析 .......................................................................... 错误!未定义书签。4测试结果及运行效果...................................................... 错误!未定义书签。5系统开发所用到的技术.................................................. 错误!未定义书签。参考文献 ............................................................................. 错误!未定义书签。附录全部代码................................................................... 错误!未定义书签。

数据结构课程设计题目

《数据结构》课程设计题目 1. 排序算法的性能分析 问题描述 设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求 (1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。 (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容 (1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。 2. 排序算法思想的可视化演示—1 基本要求 排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。 3. 排序算法思想的可视化演示—2 基本要求 排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。 4. 线性表的实现与分析 基本要求 ①设计并实现线性表。 ②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方 式 ③针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图 形演示)。 5. 等价类实现及其应用 问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为r i(是一个整数),最后期限为d i(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调

度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求: 使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。 6. 一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器。 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做) 7. 长整数的代数计算 问题描述 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ①长整数长度在一百位以上。 ②实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, a?b mod n, a÷b mod n。 ③输入输出均在文件中。 ④分析算法的时空复杂性。 8. 敢死队问题。 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。 9. 简单计算器

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

数据结构 多项式 实验报告

数据结构实验报告 实验名称:实验一——多项式的实现 学生姓名: 班级: 班内序号: 学号: 日期:2011年10月29日 1.实验要求 实验目的: 1.熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 2.学习指针、模板类、异常处理的使用 3.掌握线性表的操作的实现方法 4.学习使用线性表解决实际问题的能力 实验内容: 利用线性表实现一个一元多项式Polynomial f(x) = a0 + a1x + a2x2 + a3x3+ … + a n x n 要求: 1.能够实现一元多项式的输入和输出 2.能够进行一元多项式相加 3.能够进行一元多项式相减 4.能够计算一元多项式在x处的值 5.能够计算一元多项式的导数(选作) 6.能够进行一元多项式相乘(选作) 7.编写测试main()函数测试线性表的正确性 2. 程序分析 由于多项式是线性结构,故选择线性表来实现,在这个程序中我采用的是单链表结构,每个结点代表一个项,多项式的每一项可以用其系数和指数唯一的表示。如果采用顺序存储,那么对于结点的插入和删除的操作会比较麻烦,而且顺序表的结点个数固定,对于可能发生的情况无法很好的处理,而采用链表就会简单许多,还能自由控制链表的长度。 两个多项式要进行多次的计算,为了保护原始的数据,方便进行以后的计算,故选择把结果存储在一个新建的链表里。 本程序完成的主要功能: 1.输入和输出:需要输入的信息有多项式的项数,用来向系统动态申请内存;多项式

各项的系数和指数,用来构造每个结点,形成链表。输出即是将多项式的内容 向屏幕输出。 2.多项式相加与相减:多项式的加减要指数相同即是同类项才能实现,所以在运算时 要注意判断指数出现的各种不同的情况,分别写出计算方法。将每项运算得到 的结果都插入到新的链表中,形成结果多项式。 3.多项式的求导运算:多项式的求导根据数学知识,就是将每项的系数乘以指数,将 指数减1即可,将每项得到的结果插入到结果多项式的链表中。 4.多项式在某点的值:由用户输入x的值,然后求出每项的值相加即可。 2.1 存储结构 本程序采用的存储结构是单链表结构,其定义的结点包括三部分:系数、指数以及下一个结点的地址。示意图如下: 1.输入多项式 ·自然语言描述: 1.设置多项式的项数n; 2.按照多项式的项数申请动态数组coef[]和expn[]存储多项式的系数和指数; 3.按照指数递增的次序输入各项的系数以及指数,分别存入coef和expn; 4.再将输入的系数以及指数赋给每一个结点的coef和expn域; 5.利用头插法将每个结点加入链表。 ·伪代码: 1.输入项数n; 2.float* coef1=new float[n1]; int* expn1=new int[n1]; 3.运用for循环,循环n次 3.1 term* s=new term; 3.2 s->coef=coef[i]; 3.3 s->expn=expn[i]; 3.4 r->next=s; 3.5 r=s; 4. 运用头插法将结点插入链表。 时间复杂度: 空间复杂度: 2.输出多项式 ·自然语言描述: 1.获取头结点; 2.循环n-1次(n为多项式的项数) 2.1将指针的指向后移; 2.2依照多项式的各种情况,设置输出方式 2.2.1 系数为1且指数不为1和0,输出x^expn+; 2.2.2 系数不为0且指数为0,输出(coef)+; 2.2.3 系数不为0且指数为1,输出(coef)x+;

数据结构课程设计题目表

《数据结构》课程设计课题表 课题1:设计出链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题2:设计出顺序表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题3:设计程序以实现任意两个高次多项式的加法和乘法运算。 要求: (1)所设计的数据结构应尽可能节省存储空间。 (2)程序的运行时间应尽可能少。 课题4:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。 要求:要检查有关运算的条件,并对错误的条件产生报警。 课题5:设计出二叉链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括二叉树的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题6:设计出树结构的相关函数库,以便在程序设计中调用。要求: (1)包括树结构的存储结构及各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题7:选择合适的存储结构表示广义表,并能实现下列运算要求: (1)用大写字母表示广义表,用小写字母表示原子,并提供设置广义表的值的功能。 (2)取广义表L的表头和表尾的函数head(L)和tail(L)。

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

一元多项式的计算数据结构课程设计

一元多项式的计算—加,减 摘要(题目)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 目录 1.引言 2.需求分析 3.概要设计 4.详细设计 5.测试结果 6.调试分析 7.设计体会 8.结束语 一:引言: 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数

降序排列。 二:需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果 三:概要设计 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 1.单连表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={| ai-1, ai∈D,i=2,…,n} 基本操作: InitList(&L) //操作结果:构造一个空的线性表 CreatPolyn(&L) //操作结果:构造一个以单连表存储的多项试 DispPolyn(L) //操作结果:显示多项试 Polyn(&pa,&pb) //操作结果:显示两个多项试相加,相减的结果 } ADT List 2.本程序包含模块: typedef struct LNode //定义单链表 { }LNode,*LinkList; void InitList(LinkList &L) //定义一个空表 { } void CreatPolyn(LinkList &L) //用单链表定义一个多项式 { } void DispPolyn(LinkList L) //显示输入的多项式

数据结构-多项式相加

数据结构课程设计 2012年12月 班级:XXX 学号:XXX 姓名: XXX 指导教师:XXX

一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【算法设计思想】 ①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

【实现提示】 用带表头结点的单链表存储多项式。 【程序代码】 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } } void display(polynmial L)//显示,输出多项式L { struct node *p, *q; int flag = 0; int k = 0; q = L->next; while(q)

相关文档
最新文档