数据结构课程设计

发布 2022-10-05 01:51:28 阅读 3597

1.程序设计与实现。

1.一元多项式计算。

a)需求分析。

任务要求:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出。

问题分析:本程序的关键在于如何将输入的一元多项式按指数的降序进行排列,二难点就是将输入的两个一元多项式进行相加、想减操作。

本程序需要解决一下几个问题:

a.如何将输入的一元多项式按指数的降序进行排列;

b.如何确定要输入的多项式的项数;

c.如何将输入的两个一元多项式进行显示出来;

d.如何将输入的两个一元多项式进行相加操作;

e.如何将输入的两个一元多项式进行想减操作;

次程序的链表的应用,通过链表实现一元多项式的相加相减操作。

要对一元多项式进行表示:

一元多项式的表示在计算机内可以用链表来表示为了节省存储空间,我们只存储多项式中系数为0的项。链表的每个节点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、项数以及指向下一个多项式项节点的指针。图(1)为该节点的结构:

系数指数指针。

图(1)创建一元多项式链表,对一元多项式的运算中会出现各种可能情况进行分析,实现一元多项式的相加、相减操作。

b)概要设计。

本题设计要求是能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入。

1、 数据结构的选用:

为了实现任意多项式的加法、减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元素;例如,图(2)中的两个线性链表分别表示一元多项式a17=7+3x+9+和一元多项式。

b(x)=8x+-。从图中可见,每个节点表示多项式的一项。

图(2)多项式表的单链表存储结构。

2、 多项式输入。

采用尾插法的方式,输入多项式中一个项的系数和指数,即产生一个新的节点,建立其他的又指针,并用头结点指向它;为了半段一个多项式是否输入结束。再输入前先确定要输入的项数。

3、 程序流程图(3)

图(3)b.一元多项式的相加流程图如图(4)

c)详细设计。

算法描述:1、 定义结点类型。

用float cofe表示一元多项式的系数,int exp表示一元多项式的指数创建链表的结点类型。

struct node

float cofe;//结点类型。

int exp

2、 定义链表的类型。

struct lnode

polynomial data;//链表类型。

lnode*next;

3、创建含有n个链表类型结点的项,即创建一个n 项多项式,用函数void createlink(link&l,int n)表示,创建头结点(l->data).exp=-1;创建多项式没有成功,递归调用重新创建createlink(l,n);

4、用函数int judgeifexpsame(link l,link e)判断指数是否与多项式中已存在的某项相同,如果输入的一元多项式有重复的指数需要重新输入。

5、输出链表用函数void printlist(link l)表示,这个部分根据项系数的不同分为项的系数大于0的5种情况和项的系数小于0的5种情况。

6、链表内容的复制:把一个链表的内容复制给另外一个链表用函数void copylink(link&pc,link pc)表示。

一元多项式的相加流程图如图(4)

图(4)c)详细设计。

算法描述:1、 定义结点类型。

用float cofe表示一元多项式的系数,int exp表示一元多项式的指数创建链表的结点类型。

struct node

float cofe;//结点类型。

int exp

2、 定义链表的类型。

struct lnode

polynomial data;//链表类型。

lnode*next;

3、创建含有n个链表类型结点的项,即创建一个n 项多项式,用函数void createlink(link&l,int n)表示,创建头结点(l->data).exp=-1;创建多项式没有成功,递归调用重新创建createlink(l,n);

4、用函数int judgeifexpsame(link l,link e)判断指数是否与多项式中已存在的某项相同,如果输入的一元多项式有重复的指数需要重新输入。

5、输出链表用函数void printlist(link l)表示,这个部分根据项系数的不同分为项的系数大于0的5种情况和项的系数小于0的5种情况。

6、链表内容的复制:把一个链表的内容复制给另外一个链表用函数void copylink(link&pc,link pc)表示。

7、将多项式按照指数降序排列建立并输出,本程序用冒泡排序的方法将多项式的指数从大到小的顺序进行排列void paixu(link head1)

对链表进行排序过程中用循环来确定链表的长度。

while(head1!=null)

n++head1=head1->next

将链表中的元素按照从大到小的顺序排列。

if((p->data).exp<(q->data).exp)

elseswitch(key){

case 1:for(i=0;i<5;i++)

printf("第%d个学生的学号:",i+1);

scanf("%d",&student[i].num);

printf(" t姓名:")

scanf("%s",&student[i].name);

printf(" t分数:",i+1);

scanf("%d",&student[i].score);

break;

case 2:for(j=1;j<5;j++)

for(i=0;i<5-j;i++)

if(student[i].score

m=student[i];

student[i]=student[i+1];

student[i+1]=m;

for(i=0;i<5;i++)

printf("第%个学生的学号%d",i+1,student[i].num);

printf(" t\t姓名%s",student[i].name);

printf("\t\t分数%d",student[i].score);

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...

数据结构课程设计

数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...

数据结构课程设计

班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...