《数据结构》课程设计。
实验报告。学院:信息工程学院。
班级:__姓名:__
学号:指导老师:__
题目2 一元多项式的计算。
1、 实验目的。
1) 掌握链表的灵活运用;
2) 学习链表初始化和建立一个新的链表;
3) 知道怎样去实现链表删除结点操作与插入结点;
4) 理解链表的基本操作(包括数据域数据的相加)并能灵活运用。
2、 实验内容。
建立两个链表为稀疏多项式,将他们每项按项相加,最后将得到的链表打印出来。
要求:运用单链表来存储多项式,并且结果链表要用原来的链表空间,空间复杂度为o(1)
3、 数据结构及算法思想。
typedef int elemtype;
typedef struct clnode
elemtype coef;
elemtype exp;
struct clnode *next;
clnode, *clinklist;
建立两个单链表,并按要求将结点数据相加,将结果链表存储在c中。
4、 模块化分。
a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式。
5、 详细设计及运行结果。
a) 设计思路分析。
要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为。
运用尾插法建立两条单链表,以单链表polya和polyb分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyb中的结点插入到单链表polya中),因此“和多项式”中的结点无须另生成。
为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:
若p->expexp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。
若p->exp=q->exp,则将两个结点中的系数相加,当和不为0时修改结点p的系数。
若p->exp>q->exp,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。
b) 算法描述:
#include<>
#include<>
typedef struct node
float coef;
int exp;
struct node *next;
polynode;
polynode * createpoly()
polynode *l,*r,*s;
float coef;
int exp;
l=(polynode *)malloc(sizeof(polynode));
r=l; printf("coef:")
scanf("%f",&coef);
printf("exp: "
scanf("%d",&exp);
while(coef!=0)
s=(polynode *)malloc(sizeof(polynode));
s->coef=coef;
s->exp=exp;
r->next=s;
r=s;printf("coef:")
scanf("%f",&coef);
printf("exp: "
scanf("%d",&exp);
r->next=null;
return(l);
void addpoly(polynode *pa, polynode *pb)
polynode *p,*q,*r,*temp;
float sum;
p=pa->next;
q=pb->next;
r=pa;while(p&&q)
if(p->expexp)
r=p;p=p->next;
else if(p->exp==q->exp)
sum=p->coef+q->coef;
if(sum!=0)
else p=r->next;
temp=q;
q=q->next;
else temp=q->next;
q->next=p;
r->next=q;
r=q;q=temp;
if(q)r->next=q;
free(pb);
void print(polynode * p)
int i=0;
while(p->next)
printf("一共有%d项",i);
void main()
polynode * pa,* pb;int i;
printf("欢迎光临n");
printf("请输入多项式a(按指数递增顺序输入):");
pa=createpoly();
print(pa);
printf("请输入多项式b(按指数递增顺序输入):");
pb=createpoly();
print(pb);
printf("多项式相加结果是:");
addpoly(pa,pb);
print(pa);
printf("");
1、问题描述。
编号是1,2,……n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计一个程序来求出出列顺序。
2、要求。利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
要求:输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
输出形式:建立一个输出函数,将正确的输出序列。
#include<>
#include<>
typedef struct lnode
int listnumber,password;
struct lnode *next;
lnode,*linklist;
void create(linklist &l,int n)
int i=1;
l=(linklist)new(lnode);
cout<<"请输入第 "
l->listnumber = i;
linklist p,q=l;
for(i=2;i<=n;i++)
void game(linklist &l,int m,int n)
linklist p=l,k;
int i;
while(n)
cout<}
int main()
linklist l;
int m,n;
char c;
loof: cout<<"请输入初次报数值以及人数:"
create(l,n);
game(l,m,n);
cout<<"程序运行完毕"<
if(c=='y')
goto loof;
free(l);
return 0;}
1、问题描述。
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
2、要求。在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法。
#include
#define m 1
using namespace std
template
struct btnode
t dbtnode *lchild
btnode *rchild
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...
数据结构课程设计
数据结构 课程设计报告。安徽工业大学计算机学院。2014年6月。目录。一 迷宫问题求解 2 二 大数相乘 8 三 学生成绩查询系统 二叉排序树 10 一 问题描述 利用栈求解迷宫问题。二 设计思路 首先先定义栈,初始化,入栈,出栈,删除栈,判空等,然后再结合具体迷宫算法。三 数据结构定义。typed...