数据结构课程设计 树形目录结构

数据结构课程设计 树形目录结构
数据结构课程设计 树形目录结构

数据结构课程设计实验

树的遍历,文件目录结构的显示

实验报告

一、简介

树型结构是一类十分重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,如操作系统的文件构成、人工智能搜索算法的模型表示以及数据库系统的信息组织形式等。

文件的目录结构是树型结构在计算机操作系统的典型应用。通过树型结构可以直观且清晰的表明操作系统中的文件组织结构。用户可通过树型结构显示的文件目录列表找到自己想访问的内容。

本实验的要求在给出Unix下目录和文件信息的前提下,编程实现将其排列成一棵具有一定缩进的树。具体要求如下:

输入要求

输入数据包含几个测试案例。每一个案例由几行组成,每以行都代表了目录树的层次结构。第一行代表目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被输出,同时用一对圆括号“()”界定。同样,如果这些孩子节点中某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,由一对圆括号将首尾界定。目录的输入格式为:*nams size,文件的输入格式为:name size,其中*代表当前节点是目录,name代表文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能含有…(?,…)?,…[?,…]?和…*?。size是该文件/目录的大小,为一个大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。

输出要求

对每一个测试案例,输出时要求:第d层的文件/目录名前面需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它所包含的所有子目录和文件大小以及它自身大小的总和。

有输入/输出样例如下:

输入样例:

*/usr 1

(*mark 1 *alex 1)

(hw.c 3 *course 1)(hw.c 5)

树的遍历,文件目录结构的显示

(aa.txt 12)

*/usr 1

()

输出样例:

|_*/usr[24]

|_*mark[17]

| |_hw.c[3]

| |_*course[13]

|_aa.txt[12]

|_*alex[6]

|_hw.c[5]

|_*usr[1]

因此,实验任务如下:

(1)读入给定的Unix目录和文件信息。

(2)建立树型链表以表示目录和文件结构,同时重新计算目录大小

(3)以树型结构输出文件信息。

二、设计说明

2.1、数据结构实现

目录结构是一种典型的树形结构,可以选择孩子兄弟双亲链表来储存树的结构。

孩子兄弟双亲链表是一种典型的树的存储结构。在该表示方法中,链表中节点的三个指针域分别指向该节点的父亲、第一个孩子节点和下一个兄弟节点,分别命名为Parent域,FirstChild域和NextSibling域。

在孩子兄弟双亲链表表示法中,节点形式统一,节点间的联系比较简洁。同时,在这种存储结构上容易实现树数据结构的大多数运算。因此,孩子兄弟双亲链表表示是树的一种实用的储存结构。其节点形式如下:

本题中采用面向对象的方式实现树型结构。构建Tree类,将所有的目录作为Tree类的对象。Tree类定义如下:

class Tree{

string Name; //树的根节点名称

int Size; //树的大小,用于统计树本身及其子数大小的总和

Tree* FirstChild; //指向他的第一个孩子节点

Tree* NextSibling; //指向下一个兄弟节点

Tree* Parent; //指向父节点

1

数据结构课程设计

public:

Tree (string Name=””,int Size=0);//构造函数

void parse(); //根据输入数据建立树型结构

void reSize(); //重新统计树节点的大小

void outPut(); //输出函数

~Tree(); //析构函数

};

2.2、主要函数的实现

在Tree类中共定义了5个函数,即构造树(Tree()构造函数),销毁树(~Tree()析构函数),目录大小计算(reSize()函数),建立树型链表结构(parse()函数)和树型结构输出(outPut()函数)。下面分别说明如下:

2.2.1构造函数

构造函数的作用是建立一个只有一个节点的树,其三个指针域均为空,以方便接下来目录结构的读入和树型链表的构建。

函数实现如下:

Tree::Tree(string Name, int Size){

this->Name = Name;

this->Size = Size;

FirstChild = NULL; //FirstChild域置空

NextSibling = NULL; //NextSibling域置空

parent = NULL; //Parent域置空

}

2.2.2析构函数

析构函数的作用是删除同一个根节点下的各个子节点,以释放空间。

函数实现如下:

Tree::~Tree()

{

Tree* temp;

Tree* temp1;

temp = FirstChild;

while(temp != NULL)

{

temp1 = temp;

temp = temp->NextSibling;

delete temp1;

}

2

树的遍历,文件目录结构的显示

}

2.2.3建立树型链表结构(parse()函数)

根据输入来确定树型关系时,首先读取根节点目录/文件名和大小值,并根据这些节点信息建立一个新的节点;然后读入后面各行的信息,对于同一括号中的内容,即具有相同父节点(在同一目录中的)接点建立兄弟关联。这个函数实际上是采用层次遍历建立树型链表结构。

这里定义一个Tree*类型的数组treeArray[],此数组存放目录的节点信息。整形变量head和rear用来标记当前节点的父节点位置。每处理完一对括号(即同一目录中的所有目录/文件已被处理完),head值加1,下一对待处理括号的父节点在treeArray[]数组中应当后移一个位置。若当前处理节点是目录类型,则放置在treeArray[]数组中,rear作为数组的下标变量,加入一个目录节点信息rear便加1。若是文件类型,则需按照Name和Size建立一个数的节点,并和head所指的父节点建立关联(即表明此文件所存储的目录),但不用放进treeArray[]数组中。

此函数可形成如下的数据结构:

若有

*/admin 1

(*usr1 1 *usr2 1)

(file1.c 3 *folder 1)(file2.c 5)

则有下图:

treeArray[]

treeArray[]中存储的为目录列表。

该函数实现如下:

void Tree::parse()

{

Tree* temp;

string line;

string name;

int size;

3

数据结构课程设计

while(getline(infile,line,'\n')) //读入行

{

startPos = 0;

while(1)

{

s = getSubDir(line, &startPos); //获取一对()间字符串

int i = 1;

skipWhiteSpace(s, &i); //跳过字符串s中多余的空格

if(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i); //获取目录/文件名称

skipWhiteSpace(s,&i);

size = getSize(s,&i); //获取目录/文件大小

temp = treeArray[head%100]->FirstChild = new Tree(name,size); //获取第一个孩子节点

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp; //目录则rear+1

skipWhiteSpace(s,&i);

}

while(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp->NextSibling = new Tree(name,size);

//获取下一个兄弟节点

skipWhiteSpace(s,&i);

temp = temp->NextSibling;

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp; //目录则rear+1 }

head ++; //一对()扫描完毕

if((unsigned int)startPos >= line.length())

break;

4

树的遍历,文件目录结构的显示

}

if(head == rear) //只有一个根节点时,head=rear

break;

}

}

2.2.4目录大小计算(reSize()函数)

输入数据中,目录大小的初始化值一般为1,而目录真正的大小为其自身大小与包含的所有子目录/文件大小的和。因此在计算目录大小时,应当遍历下面所有的文件和子目录。在此采用递归的后根遍历方法。此外需注意的是,在采用孩子兄弟双亲链表表示树时,父目录下所有的子目录和自文件都在其左子树上,因此遍历的时候只需遍历其左子树即可。

例如有

*/admin 1

(*usr1 1 *usr2 1)

*/admin2 1

显然其admin所有子目录都在其左子树上,其右子树上为与之平级的目录(兄弟节点)。

该函数实现如图:

void Tree::reSize()

{

Tree* temp = this;

if(temp->FirstChild != 0){ //后根遍历左子树

temp = temp->FirstChild;

while(temp != 0){

temp->reSize();

Size += temp->Size;

temp = temp->NextSibling;

}

}

}

5

数据结构课程设计

2.2.5树型结构输出(outPut()函数)

很显然,输出是对树的先根遍历过程。为了完成对于目录的树型输出,兄弟目录之间需要相同的缩进,用…|?上下相连,而父子目录或父目录和子文件间需要设置正确的缩进,子目录或子文件比父目录右缩进8个空格。设置一个标志数组flag[11](题目规定每个目录下最大层次数为10),当前Tree* temp指针所指向的节点如果有兄弟节点,则置flag为1,否则为0;并由此节点反复查询它的祖先节点;遇到flag[]=0则输出”“,flag[]=1则输出”|“,表明是兄弟节点。这样可以保证兄弟节点间有相同缩进,而子节点比父节点向右缩进8个字符。

该函数实现如下:

void Tree::outPut()

{

Tree* temp; //用来指向当前结点的祖先结点

Tree* temp1;

bool flag[11];

int i;

outfile.open("output.txt",ios::app); //结果保存至output.txt中

if(!outfile){

cout<<"cannot append the output file.\n";

exit(0);

}

if(!checkName(Name)){

cout<<"input error!--"<

exit(0);

}

outfile<<"|_"<

outfile.close();

temp1= FirstChild; //用来指向当前结点的子结点

while(temp1 != NULL)

{

outfile.open("output.txt",ios::app);

if(!outfile){

cout<<"cannot append the output file.\n";

exit(0);

}

i = 0;

temp = temp1;

while(temp->parent != NULL)

{

6

树的遍历,文件目录结构的显示

if(i>=10){

cout<<"input error!--dictionary contains more than 10 levels."<

exit(0);

}

temp = temp->parent;

if(temp->NextSibling != NULL)

flag[i++] = true; //即flag[]为1,兄弟节点

else

flag[i++] = false; //即flag[]为0,父节点

}

while(i--)

{

if(flag[i] == true)

outfile<<"| "; //兄弟节点输出

else

outfile<<" "; //父节点输出

}

outfile.close(); //关闭文件

temp1->outPut();

temp1 = temp1->NextSibling;

}

}

三、测试结果

本试验提供了四组输入样例,其中一组为只有根节点,以测试在极端情况下算法的稳定性,一组为有两个目录,每个目录下有不超过5个目录/文件,测试算法在一般情况下的运行情况,一组为有3个目录,其中部分目录名为长度为10的整数,部分目录下嵌套10层子目录/文件,以测试在样本容量较大情况下的算法稳定性,最后一组为错误的数据,以测试程序的健壮性。

测试结果如下:

7

数据结构课程设计

8

树的遍历,文件目录结构的显示

9

数据结构课程设计

10

树的遍历,文件目录结构的显示

件信息用树形结构表示出来。

四、分析与探讨

本程序应用了面向对象的设计思想,将每个目录作为Tree类的对象加以实现,使所有对于目录的操作具有较好的通用性和可移植性。

同时,对于反复使用的checkName()、skipWhiteSpace()、getSubDir()等函数,程序将其单独声明以便于在各个函数中调用执行。最大限度的减少了编程工作量,符合模块化、结构化的程序设计思想。在写作过程中对相应语句标明了语句注释,方便阅读。

11

数据结构课程设计

此外,在程序中大量应用了树数据结构的基本操作,如函数parse()中用到了树的层序遍历:

while(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp->NextSibling = new Tree(name,size);

skipWhiteSpace(s,&i);

temp = temp->NextSibling;

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp;

}

在函数reSize()中应用到了递归的后序遍历:

while(temp != 0){

temp->reSize();

Size += temp->Size;

temp = temp->NextSibling;

}

在函数outPut()中应用到了树的先序遍历:

while(temp->parent != NULL)

{

if(i>=10){

cout<<"input error!--dictionary contains more than 10 levels."<

exit(0);

}

temp = temp->parent;

if(temp->NextSibling != NULL)

flag[i++] = true;

else

flag[i++] = false;

}

这样可以在树数据结构基础基础算法的基础上稍加改进即可实现实验所需求的功能。

很显然,程序仍有许多不完善的地方。例如程序只可识别10层嵌套的目录/

12

树的遍历,文件目录结构的显示

文件,对于超过十层的目录/文件程序便无法识别。此外,对于文件名超过10的文件处理不够完善,会出现下列的错误:

输入:

*/usr 1

(*admin 1 *s1 1)

(hw6232423.exe 3 *course 1) (hw.c 5)

(aa.txt 12)

输出:

The result is as follows:

|_*/usr[24]

|_*admin[17]

|

即程序在执行到读取串”hw6232423.exe”时自动终止,无法输出正确的目录/文件结构。

此外,对于可能出现的输入错误,程序并未有告警。虽不会导致程序崩溃,但是与用户的交互性不强。

本程序在Dev C++ 4.9.9.2版本和Visual C++ 6.0版本上调试通过。

附录源代码

Tree.cpp

#include

#include

#include

using namespace std;

string s = "";

int startPos = 0;

ofstream outfile;

ifstream infile;

class Tree{

string Name; //树的根结点名称

int Size; //树的大小,用于统计这棵树本身及其包含的所以子树大小的总和

Tree* FirstChild; //指向它的第一个孩子结点

Tree* NextSibling; //指向它的下一个兄弟结点

Tree* parent; //指向双亲结点

13

数据结构课程设计

public:

Tree(string Name = "", int Size = 0); //构造函数

void parse(); //根据输入数据来建立树形结构

void reSize(); //重新统计树结点的大小void outPut(); //输出树形结构

~Tree(); //析构函数

};

Tree* treeArray[100];

int head = 0, rear = 0;

Tree::Tree(string Name, int Size){

this->Name = Name;

this->Size = Size;

FirstChild = NULL;

NextSibling = NULL;

parent = NULL;

}

Tree::~Tree()

{

Tree* temp;

Tree* temp1;

temp = FirstChild;

while(temp != NULL)

{

temp1 = temp;

temp = temp->NextSibling;

delete temp1;

}

}

void Tree::reSize()

{

Tree* temp = this;

if(temp->FirstChild != 0){

14

树的遍历,文件目录结构的显示

temp = temp->FirstChild;

while(temp != 0){

temp->reSize();

Size += temp->Size;

temp = temp->NextSibling;

}

}

}

bool checkName(string s)

{

if(s[0]!='*' && s.length() > 10)

return false;

if(s[0]=='*' && s.length() > 11)

return false;

if(s[0]!='*' && (s[0]=='(' || s[0]==')' || s[0]=='[' || s[0]==']'))

return false;

for(int i=1;i

if(s[i]=='*' || s[i]=='(' || s[i]==')' || s[i]=='[' || s[i]==']')

return false;

}

return true;

}

void Tree::outPut()

{

Tree* temp; //用来指向当前结点的祖先结点

Tree* temp1;

bool flag[11]; //用来标志输出缩进、层次情况的数组int i;

outfile.open("output.txt",ios::app);

if(!outfile){

cout<<"cannot append the output file.\n";

exit(0);

}

if(!checkName(Name)){

cout<<"input error!--"<

15

数据结构课程设计

exit(0);

}

outfile<<"|_"<

outfile.close();

temp1= FirstChild; //用来指向当前结点的子结点while(temp1 != NULL)

{

outfile.open("output.txt",ios::app);

if(!outfile){

cout<<"cannot append the output file.\n";

exit(0);

}

i = 0;

temp = temp1;

while(temp->parent != NULL)

{

if(i>=10){

cout<<"input error!--dictionary contains more than 10 levels."<

exit(0);

}

temp = temp->parent;

if(temp->NextSibling != NULL)

flag[i++] = true;

else

flag[i++] = false;

}

while(i--)

{

if(flag[i] == true)

outfile<<"| ";

else

outfile<<" ";

}

outfile.close();

16

树的遍历,文件目录结构的显示temp1->outPut();

temp1 = temp1->NextSibling;

}

}

void skipWhiteSpace(string& s, int* i)

{

while(s[*i] == '\t' || s[*i] == ' ')

(*i)++;

}

string getSubDir(string& line, int* startPos)

{

string res = "";

skipWhiteSpace(line,startPos);

while(line[*startPos] != ')')

res += line[(*startPos)++];

res += line[(*startPos)++];

skipWhiteSpace(line, startPos);

return res;

}

int stringToNum(string s)

{

int num = 0;

unsigned int i = 0;

while(i < s.length())

{

num *= 10;

num += s[i++] - '0';

}

return num;

}

string getName(string& s, int* i)

{

string name = "";

17

数据结构课程设计

while(s[*i] != ' ' && s[*i] != '\t')

name += s[(*i)++];

return name;

}

int getSize(string&s, int* i)

{

string size = "";

while((unsigned int)(*i) < s.length() && s[*i] != ' ' && s[*i] != '\t' && s [*i] != ')')

size += s[(*i)++];

return stringToNum(size);

}

void Tree::parse()

{

Tree* temp;

string line;

string name;

int size;

while(getline(infile,line,'\n'))

{

startPos = 0;

while(1)

{

s = getSubDir(line, &startPos);

int i = 1;

skipWhiteSpace(s, &i);

if(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp = treeArray[head%100]->FirstChild = new

Tree(name,size);

temp->parent = treeArray[head%100];

18

树的遍历,文件目录结构的显示

if(name[0] == '*')

treeArray[(rear++)%100] = temp;

skipWhiteSpace(s,&i);

}

while(s[i] != ')')

{

skipWhiteSpace(s,&i);

name = getName(s,&i);

skipWhiteSpace(s,&i);

size = getSize(s,&i);

temp->NextSibling = new Tree(name,size);

skipWhiteSpace(s,&i);

temp = temp->NextSibling;

temp->parent = treeArray[head%100];

if(name[0] == '*')

treeArray[(rear++)%100] = temp;

}

head ++;

if((unsigned int)startPos >= line.length())

break;

}

if(head == rear)

break;

}

}

int main()

{

Tree* fileTree;

string s;

string name;

int size;

outfile.open("output.txt");

if(!outfile){

cout<<"cannot open the output file!\n";

exit(0);

}

19

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

数据结构课程设计题目 数据结构课程设计题目(大题目).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

数据结构课程设计

上交内容要求 上交的内容必须由以下部分组成 a)需求分析:在该部分中叙述,每个模块的功能要求。 b)概要设计:在此说明每个部分的算法设计说明(可以是描述每一个算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。 c)详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 d)调试分析:测试数据,测试输出的结果(程序运行截图及相关说明)。 e) 总结:总结可以包括 : 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。 数据结构课程设计题目 1. “随机漫步”问题 问题描述: 有一类问题总称为“随机漫步”(random walk)问题,这类问题长久以来吸引着数学界的兴趣。所有这些问题即使是最简单的解决起来也是极其困难的。而且它们在很大程度上还远没有得到解决。一个这样的问题可以描述为: 在矩形的房间里,铺有n×m块瓷砖,现将一只蟑螂放在地板中间一个指定方格里。蟑螂随机地从一块瓷砖“漫步”到另一块瓷砖。假设它可能从其所在的瓷砖移动到其周围八块瓷砖中的任何一个(除非碰到墙壁),那么它把每一块瓷砖都至少接触一次将花费多长时间? 虽然这个问题可能很难用纯粹的概率技术来解决,但是使用计算机的话却十分容易。使用计算机解决此问题的技术称为“模拟”。这种技术广泛应用于工业中,用来预测运输流量,存货控制等等。该问题可采用如下方法进行模拟: 用一个n×m数组作为计数器来表示蟑螂到达每一块瓷砖的次数,每个数组单元的初始值均置为零。蟑螂在地板上的位置用坐标(ibug,jbug)表示。蟑螂的八种可能移动用在位置(ibug + imove[k],jbug + jmove[k])的瓷砖表示,其中0≤k≤7,并且 imove[0] = -1 jmove[0] = 1 imove[1] = 0 jmove[1] = 1 imove[2] = 1 jmove[2] = 1 imove[3] = 1 jmove[3] = 0 imove[4] = 1 jmove[4] = -1 imove[5] = 0 jmove[5] = -1 imove[6] = -1 jmove[6] = -1 imove[7] = -1 jmove[7] = 0 蟑螂向其相邻的八个方格的随机漫步通过产生一个随机数值k(0≤k≤7)来模拟。当然,蟑螂不能爬出屋外,所以应该去掉通往墙壁的坐标值并形成一个新的随机组合。蟑螂每次进入一个方格,该方格的计数器就增加一,从而计数器的一个非零元素就表示蟑螂到达对应方格的次数。当每一个方格被至少进入一次时,试验就完成了。试编写程序进行上述规定的模拟试验。

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 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. 掌握书写程序设计说明文档的能力 5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力 二.课程设计容说明 1. 项目一 (1) 对设计任务容的概述 学生成绩管理** 任务:要现对学生资料的录入、浏览、插入和删除等功能。 输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。 (2) 详细设计 LinkList *create():输入学生成绩记录函数; void print(LinkList *head):显示全部记录函数 LinkList *Delete(LinkList *head):删除记录函数 LinkList *Insert(LinkList *head):插入记录函数 void menu_select():菜单选择 void ScoreManage():函数界面 (3) 程序流程图

(4) 程序模块及其接口描述 该程序可以分为以下几个模块: 1、菜单选择:void menu_select(); 提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。 2、输入功能:LinkList *create(); 通过一个for循环语句的控制,可以一次完成无数条记录的输入。并将其存入链

数据结构课程设计题目选择

数据结构课程设计题目 说明: (1)选用语言:C或Java语言; (2)需要注明3人(可少于3人)小组各自承担和完成的任务(据此给予成绩); (3)如下带“*”的题目,“*”越多,难度越大一些,分值权重更高---要得到更高分数,推荐选择。 要求: (1) 用中文给出设计说明书(含重要子函数的流程图); (2) 给出测试通过、能实现相应功能的源代码; (3) 测试报告。 0、小学数学四则混合运算试题出题、评价、题库自动生成与组卷系统(****)---已经有2组选择 任务: (1)将随机给出的四则混合运算表达式显示在计算机显示器上,要求应试者给出答案;并且使用堆栈对该表达式求值,同给出的答案进行比较,判断 正确和错误。给出鼓励信息和嘉奖信息; (2)保存多人在不同时间应试的题目与他(或她)给出的答案,评价所出题目的难易程度(通过多人回答正确与否的情况给出),形成题库; (3)按照用户给出的题目难易程度指标(例如让50人的得分满足怎样的正态分布,如90分以上10%,80分以上30%,70分以上30%,60分以上20%,60分 以下10%),从题库中抽取不同的题目,组成试卷。 要求:随机产生的题目中,参加运算的数据随机、运算符随机。题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。 1、集合的并、交和差运算---已经有1组选择 任务:编制一个能演示执行集合的并、交和差运算的程序。 要求: (1) 集合的元素限定为小写字母字符[…a?..?z?] 。 (2) 演示程序以用户和计算机的对话方式执行。 实现提示:以链表表示集合。 选作内容: (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表达式求值。 (4) 集合的元素类型推广到其他类型,甚至任意类型。 2、停车场管理------已经有2组选择 任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 要求:以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。 3、哈夫曼码的编/译码系统(**)---已经有1组选择

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

题目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)学习用文档书写程序说明

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

数据结构课程设计全集

数据结构实践教程

前言 数据结构是计算机专业的必修。主干课程之一,它旨在使读者学会分析研究数据对象的特性,学会数据的组织方法, 以便选择合适的数据逻辑结构和存储结构, 以及相应的运算(操作),把现实世界中的问题转化为计算机内部的表示和处理,这是一个良好的程序设计技能训练的过程. 在整个教学或学习过程中,解题能力和技巧的训练是一个重要的环节。为了帮助教师讲授“数据结构",满足指导和评价“课程设计”的需要, 为了帮助和指导读者更好地学习数据结构这门课程,我们特编写了这本《数据结构实践教程》辅助教材,旨在弥补课堂教学和实验中的不足,帮助学生充分理解和巩固所学的基本概念、原理和方法,达到融会贯通、举一反三的目的。 实践证明,理解课程内容与较好地解决实际问题之间存在着明显差距,而算法设计完成的质量与基本的程序设计素质的培养是密切相关的。要想理解和巩固所学的基本概念。原理和方法, 牢固地掌握所学的基本知识。基本技能, 达到融会贯通。举一反三的目的, 就必须多做。多练。多见(见多识广)。正是为了达到上述目的,书中用一些实际的应用,对一些重要的数据结构和算法进行解读。经过循序渐进地训练, 就可以使读者掌握更多的程序设计技巧和方法,提高分析。解决问题的能力。 本书根据学生的基础知识和兴趣爱好将内容分为基础篇和提高篇两个部分。第一部分基础篇精选出适当的、与实际生活结合密切的课程设计实例加以分析实现。第二部分提高篇旨在使读者通过运用数据结构知识及复杂算法去解决现实世界中的一些实际问题。 本书依据数据结构课程教学大纲要求,同时又独立于具体的教科书,既重视实践应用,又重视理论分析,本书的主要特点有: ●本书精选出来的实例项目经典、实用、具有一定的趣味性,其内容丰富、涉及面广、难易适当,能给读者以启发,达到让读者掌握相关知识和开阔视野的目的 ●为了提高学生分析问题、解决问题的能力,本书对实例项目进行分析,其设计思路清晰流畅,值得参考. ●本书不仅仅是对照数据结构课程教学大纲举些例子说明数据结构能解决什么问题,而是通过分析具体的实例项目,得到对数据组织关系的需求,从而选择某个数据结构适应一些特定的问题和算法,并说明使用这种数据结构的优缺点. ●所有实例项目都给出了参考算法和源程序代码并在Turbo C和VisualC++6.0环境下运行通过。 由于作者水平有限、时间仓促,本书难免存在一些缺点和错误,恳请广大读者及同行们批评指正。

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

数据结构课程设计题目

《数据结构》课程设计题目 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:

数据结构课程设计题目表

《数据结构》课程设计课题表 课题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) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

数据结构课程设计题目

数据结构课程设计 一、考核方法和容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。 评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸打印,报告总页数控制在10—15页,报告中不能全是代码,报告中代码总量控制在3页。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的题目 1.长整数的加法运算 2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用 4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现

数据结构课程设计报告-学生成绩管理系统[]

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构课程设计 题目:用C语言实现成绩统计程序的设计系名:信息工程系 专业班级:计算机1121 姓名:吴涛 学号:10210412104 指导教师:司晓梅 2016年3 月20日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:数据结构课程设计指导教师:司晓梅班级名称:计算机1121 开课系、教研室:信息系计算机 一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。 任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。 二、课程设计的内容与基本要求 设计题目:用C语言实现成绩统计程序的设计 〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法: (1)输入每个人的各门课程的成绩,计算每人的平均成绩; (2)按平均成绩的高低次序,打印出个人的名次,平均成绩相同的为同一名次; (3)按名次列出每个学生的姓名和各科成绩; 〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制; 〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解; 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书; 三、课程设计步骤及时间进度和场地安排 时间:1周地点:现代教育中心 具体时间安排如下: 第一天:布置题目,确定任务、查找相关资料 第二天~第四天:功能分析,编写程序,调试程序、运行系统; 第五天上午:撰写设计报告; 第五天下午:程序验收、答辩。 四、课程设计考核及评分标准

相关文档
最新文档