当前位置:文档之家› 数据结构课程设计_表达式求值【完整版】

数据结构课程设计_表达式求值【完整版】

数据结构课程设计_表达式求值【完整版】
数据结构课程设计_表达式求值【完整版】

XXXXXX大学《数据结构》课程设计报告

班级:

学号:

姓名:

指导老师:

目录

一算术表达式求值

一、需求分析

二、程序的主要功能

三、程序运行平台

四、数据结构

五、算法及时间复杂度

六、测试用例

七、程序源代码

二感想体会与总结

算术表达式求值

一、需求分析

一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。

二、程序的主要功能

(1)从键盘读入一个合法的算术表达式,输出正确的结果。

(2)显示输入序列和栈的变化过程。

三、程序运行平台

Visual C++ 6.0版本

四、数据结构

本程序的数据结构为栈。

(1)运算符栈部分:

struct SqStack //定义栈

{

char *base; //栈底指针

char *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStack (SqStack &s) //建立一个空栈S

{

if (!(s.base = (char *)malloc(50 * sizeof(char))))

exit(0);

s.top=s.base;

s.stacksize=50;

return OK;

}

char GetTop(SqStack s,char &e) //运算符取栈顶元素

{

if (s.top==s.base) //栈为空的时候返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK

}

int Push(SqStack &s,char e) //运算符入栈

{

if (s.top-s.base >= s.stacksize)

{

printf("运算符栈满!\n");

s.base=(char*)realloc (s.base,(s.stacksize+5)*sizeof(char) ); //栈满的时候,追加5个存储空间

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize;

s.stacksize+=5;

}

*(s.top)++=e; //把e入栈

return OK;

}

int Pop(SqStack &s,char &e) //运算符出栈

{

if (s.top==s.base) //栈为空栈的时候,返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

{

e=*--s.top; //栈不为空的时候用e做返回值,删除S的栈顶元素,并返回OK

return OK;

}

}

int StackTraverse(SqStack &s) //运算符栈的遍历

{

char *t;

t=s.base ;

if (s.top==s.base)

{

printf("运算符栈为空!\n"); //栈为空栈的时候返回ERROR

return ERROR;

}

while(t!=s.top)

{

printf(" %c",*t); //栈不为空的时候依次取出栈内元素

t++;

}

}

(2)数字栈部分:

struct SqStackn //定义数栈

{

int *base; //栈底指针

int *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStackn (SqStackn &s) //建立一个空栈S

{

s.base=(int*)malloc(50*sizeof(int));

if(!s.base)exit(OVERFLOW); //存储分配失败

s.top=s.base;

s.stacksize=50;

return OK;

}

int GetTopn(SqStackn s,int &e) //数栈取栈顶元素

{

if (s.top==s.base)

{

printf("运算数栈为空!\n"); //栈为空的时候返回ERROR

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候,用e作返回值,返回S的栈顶元素,并返回OK

return OK;

}

int Pushn(SqStackn &s,int e) //数栈入栈

{

if (s.top-s.base >=s.stacksize)

{

printf("运算数栈满!\n"); //栈满的时候,追加5个存储空间

s.base=(int*)realloc (s.base,(s.stacksize+5)*sizeof(int) );

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize; //插入元素e为新的栈顶元素

s.stacksize+=5;

}

*(s.top)++=e; //栈顶指针变化

return OK;

}

int Popn(SqStackn &s,int &e) //数栈出栈

{

if (s.top==s.base)

{

printf(" 运算符栈为空!\n"); //栈为空栈的视时候,返回ERROR

return ERROR;

}

else

{

e=*--s.top; //栈不空的时候,则删除S的栈顶元素,用e返回其值,并返回OK

return OK;

}

}

int StackTraversen(SqStackn &s) //数栈遍历

{

int *t;

t=s.base ;

if (s.top==s.base)

{

printf(" 运算数栈为空!\n"); //栈为空栈的时候返回ERROR

return ERROR;

}

while(t!=s.top)

{

printf(" %d",*t); //栈不为空的时候依次输出

t++;

}

return ERROR;

}

五、算法及时间复杂度

1、算法:

建立两个不同类型的空栈,先把一个…# ?压入运算符栈。输入一个算术表达式的字符串(以…#?结束),从第一个字符依次向后读,把读取的数字放入数字栈,运算符放入运算符栈。判断新读取的运算符和运算符栈顶得运算符号的优先级,以便确定是运算还是把运算符压入运算符栈。最后两个…#?遇到一起则运算结束。数字栈顶的数字就是要求的结果。

2、时间复杂度:O(n)

数据压缩存储栈,其操作主要有:

建立栈int Push(SeqStack *S, char x)

入栈int Pop(SeqStack *S, char x)

出栈。

以上各操作运算的平均时间复杂度为O(n),其主要时间是耗费在输入操作。

六、测试用例

如图所示。

最终结果如图所示:

七、源代码

/*********************************************************************************************** ***

第七题算术表达式求值

[问题描述]

一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,

运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。

编程利用“算符优先法”求算术表达式的值。

[基本要求]

(1)从键盘读入一个合法的算术表达式,输出正确的结果。

(2)显示输入序列和栈的变化过程。

************************************************************************************************ ***/

#include

#include

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define STACK_INIT_SIZE 100

//#define STACKINCREMENT 10

//========================================================

// 以下定义两种栈,分别存放运算符和数字

//========================================================

//*******************运算符栈部分*************************

struct SqStack //定义栈

{

char *base; //栈底指针

char *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStack (SqStack &s) //建立一个空栈S

{

if (!(s.base = (char *)malloc(50 * sizeof(char))))

exit(0);

s.top=s.base;

s.stacksize=50;

return OK;

}

char GetTop(SqStack s,char &e) //运算符取栈顶元素

{

if (s.top==s.base) //栈为空的时候返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK

return OK;

}

int Push(SqStack &s,char e) //运算符入栈

{

if (s.top-s.base >= s.stacksize)

{

printf("运算符栈满!\n");

s.base=(char*)realloc (s.base,(s.stacksize+5)*sizeof(char) ); //栈满的时候,追加5个存储空间

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize;

s.stacksize+=5;

}

*(s.top)++=e; //把e入栈

return OK;

}

int Pop(SqStack &s,char &e) //运算符出栈

{

if (s.top==s.base) //栈为空栈的时候,返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

{

e=*--s.top; //栈不为空的时候用e做返回值,删除S的栈顶元素,并返回OK

return OK;

}

}

int StackTraverse(SqStack &s) //运算符栈的遍历

{

char *t;

t=s.base ;

if (s.top==s.base)

{

printf("运算符栈为空!\n"); //栈为空栈的时候返回ERROR

return ERROR;

}

while(t!=s.top)

{

printf(" %c",*t); //栈不为空的时候依次取出栈内元素

t++;

}

return ERROR;

}

//**********************数字栈部分***************************

struct SqStackn //定义数栈

{

int *base; //栈底指针

int *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStackn (SqStackn &s) //建立一个空栈S

{

s.base=(int*)malloc(50*sizeof(int));

if(!s.base)exit(OVERFLOW); //存储分配失败

s.top=s.base;

s.stacksize=50;

return OK;

}

int GetTopn(SqStackn s,int &e) //数栈取栈顶元素

{

if (s.top==s.base)

{

printf("运算数栈为空!\n"); //栈为空的时候返回ERROR

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候,用e作返回值,返回S的栈顶元素,并返回OK

return OK;

}

int Pushn(SqStackn &s,int e) //数栈入栈

{

if (s.top-s.base >=s.stacksize)

{

printf("运算数栈满!\n"); //栈满的时候,追加5个存储空间

s.base=(int*)realloc (s.base,(s.stacksize+5)*sizeof(int) );

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize; //插入元素e为新的栈顶元素

s.stacksize+=5;

}

*(s.top)++=e; //栈顶指针变化

return OK;

}

int Popn(SqStackn &s,int &e) //数栈出栈

{

if (s.top==s.base)

{

printf(" 运算符栈为空!\n"); //栈为空栈的视时候,返回ERROR

return ERROR;

}

else

{

e=*--s.top; //栈不空的时候,则删除S的栈顶元素,用e返回其值,并返回OK

return OK;

}

}

int StackTraversen(SqStackn &s) //数栈遍历

{

int *t;

t=s.base ;

if (s.top==s.base)

{

printf(" 运算数栈为空!\n"); //栈为空栈的时候返回ERROR

return ERROR;

}

while(t!=s.top)

{

printf(" %d",*t); //栈不为空的时候依次输出

t++;

}

return ERROR;

}

//======================================================== // 以下定义函数

//======================================================== int Isoperator(char ch) //判断是否为运算符,分别将运算符和数字进入不同的栈{

switch (ch)

{

case '+':

case '-':

case '*':

case '/':

case '(':

case ')':

case '#':

return 1;

default:

return 0;

}

}

int Operate(int a, char op, int b) //运算操作

{

int result;

switch(op)

{

case '+':

result=a+b;

break;

case '-':

result=a-b;

break;

case '*':

result=a*b;

break;

case '/':

result=a/b;

break;

}

return result;

}

char Precede(char ch1, char ch2) //运算符优先级的比较

{

char p;

switch(ch1)

{

case '+':

case '-':

if (ch2=='+'||ch2=='-'||ch2==')'||ch2=='#')

p = '>'; //ch1运算符的优先级小于ch2运算符

else

p = '<';

break;

case '*':

case '/':

if (ch2 == '(')

p = '<';

else

p = '>';

break;

case '(':

if (ch2 == ')')

p = '=';

else if (ch2 == '#')

{

printf(" 表达式错误!运算符不匹配!\n") ;

exit(0);

}

else

p = '<';

break ;

case ')':

if (ch2 == '(')

{

printf(" 表达式错误!运算符不匹配!\n") ;

exit(0);

}

else

p = '>';

break ;

case '#':

if (ch2 == ')')

{

printf(" 表达式错误!运算符不匹配!\n") ;

exit(0);

}

else if (ch2 == '#')

p = '=';

else

p='<';

break;

}

return p;

}

//======================================================== // 以下是求值过程

//======================================================== int EvaluateExpression() //参考书p53算法3.4

{

int a, b, temp, answer;

char ch,op,e;

char *str;

int j = 0;

SqStackn OPND; //OPND为运算数字栈

SqStack OPTR; //OPTR为运算符栈

InitStack(OPTR);

Push(OPTR,'#'); //,所以此栈底是'#',因为运算符栈以'#'作为结束标志InitStackn(OPND);

// printf("\n\n按任意键开始求解:\n\n");

// ch=getch();

printf("\n请输入表达式并以'#'结束:\n");

str =(char*)malloc(50*sizeof(char));

gets(str);

ch=str[j]; //ch是字符型的,而e是整型的整数

j++;

GetTop(OPTR,e); //e为栈顶元素返回值

while (ch!='#' || e!='#')

{

if (!Isoperator(ch)) //遇到数字,转换成十进制并计算

{

temp=ch-'0'; //将字符转换为十进制数

ch=str[j];

j++;

while(!Isoperator(ch))

{

temp=temp*10 + ch-'0'; //将逐个读入运算数的各位转化为十进制数

ch=str[j];

j++;

}

Pushn(OPND,temp);

}

else if (Isoperator(ch)) //判断是否是运算符,不是运算符则进栈

switch (Precede(e,ch))

{

case '<' : Push(OPTR,ch); // 栈顶元素优先权低

ch = str[j++];

printf("\n\n 运算符栈为:\n"); //输出栈,显示栈的变化

StackTraverse(OPTR);

printf("\n 运算数栈为:\n");

StackTraversen(OPND);

break;

case '=' : Pop(OPTR,op); // 脱括号并接收下一字符

ch = str[j++] ;

printf("\n\n 运算符栈为:\n");

StackTraverse(OPTR);

printf("\n 数栈为:\n");

StackTraversen(OPND);

break;

case '>' : Pop(OPTR,op); //弹出最上面两个,并运算,把结果进栈

Popn(OPND,b);

Popn(OPND,a);

Pushn(OPND,Operate(a,op,b));

printf("\n\n 运算符栈为:\n");

StackTraverse(OPTR);

printf("\n 数栈为:\n");

StackTraversen(OPND);

}

else

{

printf("您的输入有问题,请检查重新输入!");

exit(0);

}

GetTop(OPTR,e); //取出运算符栈最上面元素是否是'#' } //while

GetTopn(OPND,answer); //已输出。数字栈最上面即是最终结果return answer;

}

//========================================================

// 执行部分

//========================================================

void ShowMenu()

{

printf("\n\n");

printf(" 表达式求值系统\n");

}

void Quit();

void Manage()

{

int answer;

// ShowMenu();

answer=EvaluateExpression();

printf("\n\n表达式结果是: %d\n",answer);

Quit();

}

void Quit()

{

char ch;

printf(" 本次运算结束。\n");

printf(" 继续本系统吗?\n\n");

printf(" 继续运算请按Y/y ");

printf("\n 退出程序请按N/n ");

printf("

\n_________________________________________________________________ __\n");

ch=getch();

ch=toupper(ch); //将ch字符转换成大写字母

if(ch == 'N')

{

printf("\n\n 系统退出。\n");

exit(0);

}

Manage();

}

int main()

{

ShowMenu();

Manage();

return 0;

}

感想体会与总结

好的算法+编程技巧+高效率=好的程序。

1、做什么都需要耐心,做设计写程序更需要耐心。一开始的时候,我写函数写的很快,可是等最后调试的时候发现错误很隐蔽,就很费时间了。后来我先在纸上构思出函数的功能和参数,考虑好接口之后才动手编,这样就比较容易成功了。

2、做任何事情我决定都应该有个总体规划。之后的工作按照规划逐步展开完成。对于一个完整的程序设计,首先需要总体规划写程序的步骤,分块写分函数写,然后写完一部分马上纠错调试。而不是像我第一个程序,一口气写完,然后再花几倍的时间调试。一步步来,走好一步再走下一步。写程序是这样,做项目是这样,过我们的生活更是应该这样。

3、感觉一开始设计结构写函数体现的是数据结构的思想,后面的调试则更加体现了人的综合素质,专业知识、坚定耐心、锲而不舍,真的缺一不可啊。

4、通过这次课设,不仅仅复习了C语言相关知识、巩固了数据结构关于栈和排序的算法等知识,更磨练了我的意志。

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

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

数据结构课程设计报告

山东建筑大学 课程设计成果报告 题目: 1.数组实现两个矩阵的相乘运算 2.成绩分析问题 课程:数据结构A课程设计 院(部):管理工程学院 专业:信息管理与信息系统 班级:信管*** 学生姓名:*** 学号:******** 指导教师:******* 完成日期:2016年12月29日

目录 目录 (2) 一、课程设计概述 (3) 二、课程设计题目一 (3) 用数组实现两个矩阵的相乘运算 (3) 2.1[问题描述] (3) 2.2[要求及提示]: (3) 2.3[详细设计] (4) 2.4[调试分析] (5) 2.5[运行结果及分析] (5) 三、课程设计题目二 (6) 成绩分析问题 (6) 3.1[问题描述] (6) 3.2[概要设计] (6) 3.3[存储结构] (7) 3.4[流程图] (7) 3.5[详细设计] (8) 3.6[调试分析] (8) 3.7[运行结果及分析] (22) 四、参考文献: (25)

一、课程设计概述 本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。使用语言:C 编译环境:vc6.0 二、课程设计题目一 用数组实现两个矩阵的相乘运算 2.1[问题描述] #include “stdio.h” int r[6][6]; void mult(int a[6][6] , int b[6][6]){ } main(){ int i,j; int num1[6][6],num2[6][6]; printf(“请输入第一个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num1[i][j]); printf(“请输入第二个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num2[i][j]); mult(num1,num2); printf(“\n两个矩阵相乘后的结果为:”); for(i=1;i<=6;i++) {for(j=1;j<=6;j++) printf(“%4d”,r[i][j]); printf(“\n”); } } 2.2[要求及提示]: 1、要求完善函数mult( ),

数据结构课程设计

题目: 学院: 专业班级: 学生姓名: 指导教师: 2016 年06 月2 9日

目录 一、课程设计目的 (3) 二、课程设计步骤 (3) 三、课程设计内容 (4) 四、课程设计报告 (6) 五、提交材料 (6) 六、考核方式与评分标准 (7) 七、参考文献 (8) 附录1 齐齐哈尔大学软件工程系课程设计说明书(报告)撰写规范 (9)

一、课程设计目的及要求 《数据结构与算法分析》课程设计培养计算机专业的学生的算法程序设计能力。通过上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对数据结构课程和算法的理解。使学生更好地掌握数据结构的基本概念、基本原理、及基本算法,具有分析算法、设计算法、构造和开发较复杂算法的基本能力。 要求学生能综合运用《数据结构与算法分析》的相关知识,培养学生上机解决一些与实际应用结合紧密的、规模较大的问题的能力,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析实际问题的能力并提高C语言编程技巧,培养良好的编程风格。 课程设计要求独立完成,题目自选(参考题目见三,也可自拟),但需要老师确认(6月16日前定题),一人一题,要求程序有能采用交互式工作方式的界面进行功能的选择,只能用文件存储数据和处理数据不能使用数据库。要求在教学周的第18周前完成。 二、课程设计步骤 随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。然而,编制一个10000行的程序的难度绝不仅仅是一个5000行的程序的两倍,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的课程设计的复杂度远不如(从实际问题中提出来的)一个“真正的”软件,但为了培养一个软件工作者所应具备的科学工作的方法和作风,完成课程设计的应有如下的5个步骤: 1.问题分析和任务定义 通常,课程设计题目的陈述比较简洁,或者说是有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。注意:本步骤强调的是做什么,而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。 2.数据类型和系统设计 在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个

数据结构课程设计题目2010

一、数据结构课程设计要求 1.学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。 2.学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。 3.课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上2小时的上机来调试C 或C++语言设计的程序,总共至少要上机调试程序20小时。属教师安排上机时间学生不得缺席。 二、数据结构课程设计题目 1. 运动会分数统计(限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) 能统计各学校总分, 3) 可以按学校编号或名称、学校总分、男女团体总分排序输出; 4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2. 飞机订票系统(限1 人完成) 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

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

校园导游系统设计 一、设计要求 1.问题描述 设计一个校园导游程序,为来访的客人提供信息查询服务。 2.需求分析 (1)设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。 (2)存放景点代号、名称、简介等信息供用户查询。 (3)为来访客人提供图中任意景点相关信息的查询。 (4)为来访客人提供图中任意景点之间的问路查询。 (5)可以为校园平面图增加或删除景点或边,修改边上的权值等。 二、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图7-10所示。 2.存储结构设计 本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的个数由分量vexnum、arcnum表示,它们是整型数据。 此外,本系统还设置了三个全局变量:visited[ ] 数组用于存储顶点是否被访问标志;d[ ]数组用于存放边上的权值或存储查找路径顶点的编号;campus是一个图结构的全局变量。 3.系统功能设计 本系统除了要完成图的初始化功能外还设置了8个子功能菜单。图的初始化由函数initgraph( )实现。依据读入的图的顶点个数和边的个数,分别初始化图结构中图的顶点向量数组和图的邻接矩阵。8个子功能的设计描述如下。 (1)学校景点介绍 学校景点介绍由函数browsecompus( )实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。 (2)查看浏览路线 查看浏览路线由函数shortestpath_dij( )实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其它景点的最短路径线路及距离。 (3)查看两景点间最短路径

数据结构课程设计要求

一、数据结构课程设计要求 1. 学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。 2. 学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况, 二、数据结构课程设计题目 1. 运动会分数统计(限 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)能统计各学校总分, 3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5)数据存入文件并能随时查询 6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在 c 语言程序设计的书上,请自学解决) 请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2. 飞机订票系统(限1 人完成)任务:通过此系统可以实现如下功能:录入:可以录入航 班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息: 当航班信息改变可以修改航班数据文件要求: 根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能; 3. 文章编辑(限 1 人完成)功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80 个字符,共N 行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分 4 行输出"全部字母数"、"数字个数" 、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章;

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

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

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

数据结构课程设计报告范例

Guangxi University of Science and Technology 课程设计报告 课程名称:算法与编程综合实习 课题名称: 姓名: 学号: 院系:计算机学院 专业班级:通信121 指导教师: 完成日期:2012年12月15日

目录 第1部分课程设计报告 (3) 第1章课程设计目的 (3) 第2章课程设计内容和要求 (4) 2.1 问题描述 (4) 2.2 设计要求 (4) 第3章课程设计总体方案及分析 (4) 3.1 问题分析 (4) 3.2 概要设计 (7) 3.3 详细设计 (7) 3.4 调试分析 (10) 3.5 测试结果 (10) 3.6 参考文献 (12) 第2部分课程设计总结 (13) 附录(源代码) (14)

第1部分课程设计报告 第1章课程设计目的 仅仅认识到队列是一种特殊的线性表是远远不够的,本次实习的目的在于使学生深入了解队列的特征,以便在实际问题背景下灵活运用它,同时还将巩固这种数据结构的构造方………………………………………………………………………………………………………………………………………………………………………………………..(省略)

第2章课程设计内容和要求 2.1问题描述: 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。 图A 2.2设计要求: 要求设计程序输出如下: (1) 建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏 幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。 (3)用一种标志(如数字8)在迷宫中标出该条通路; (4)在屏幕上输出迷宫和通路; (5)上述功能可用菜单选择。

数据结构课程设计内容

(一)课程设计要求 1.分组要求 每个人一个小组进行分组。 2.实训目的 (1)熟悉课程所学的内容,包括线性表、链表、串,栈,队列,树,图,查找和排序; (2)学生能够按照软件工程的规范要求,能够运用软件工程的基本概念、方法与过程来进行软件的设计与开发。 3.课程设计要求 (1)每组学生在以下项目中选择一项完成即可; (2)编写程序要严格按照程序编程规范进行代码编写; (2)必须按照个体软件的过程,真实地采集数据、填写相关的表格、编写有关的文档; (3)按照老师的要求,每个人必须独立完成; (4)按照实训的时间安排进行实训,实训结束后提交有关的表格与文档。(二)课程设计题目 1.线性表 (1)实验目的:利用顺序结构和链式结构实现线性表的基本运算。 (2)实验要求:对于顺序存储结构的线性表,验证其插入、删除操作;对以链式存储结构存储的线性表,验证其插入、删除、查找操作。 2.火车列车调度问题 (1)实验目的:利用顺序结构和链式结构实现栈和队列的基本运算 (2)实验要求:栈操作的验证火车调度;对于顺序队列、链队列的基本操作进行验证; 3.稀疏矩阵 (1)实验目的:利用三元组和十字链表实现稀疏矩阵的有关算法 (2)实验要求:以三元组作为存储结构实现稀疏矩阵的转置

4.二叉树 (1)实验目的:利用二叉链表实现二叉树的建立和遍历 (2)实验要求:以二叉链表作为存储结构建立二叉树;以二叉链表作为存储结构实现先序、中序和后序遍历二叉树 5.图的遍历和最短路径问题 (1)实验目的:在图的两种存储结构基础上实现图的遍历 (2)实验要求:采用连通无向图作为遍历对象对以邻接矩阵为存储结构的图实现深度优先搜索和广度搜索遍历;采用连通无向图作为遍历对象,建立邻接表时顶点对序号从大到小输入,对以邻接表为存储结构的图实现深度优先搜索和广度优先搜索遍历; 6.排序与查找 (1)实验目的:验证各排序与查找算法 (2)实验要求:编程实现排序与查找算法,包括直接插入排序、选择和起泡排序、折半查找 7.综合课程设计1 (1)实验目的:综合应用所学知识;培养系统设计的整体思想;提高编写程序、调试程序的能力;学习系统测试的方法;学习编写技术文档; (2)实验要求:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列; 8.综合课程设计2 (1)实验目的:综合应用所学知识;培养系统设计的整体思想;提高编写程序、调试程序的能力;学习系统测试的方法;学习编写技术文档; (2)实验要求:设计一个校园导游程序,为来访的客人提供各种信息查询

数据结构课程设计题目

《数据结构》课程设计题目 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. 简单计算器

数据结构课程设计报告范本

数据结构课程设计 报告

数据结构课程设计报告 压缩软件 一·问题描述 利用哈夫曼编码设计一个压缩软件,能对任何类型的文件进行哈夫曼编码,产生编码后的文件——压缩文件;也能对输入的压缩文件进行译码,生成压缩前的文件——解压文件。 二·基本要求 要求编码和译码的效率尽可能地高。 三·工具/准备工作 已学内容:哈夫曼树,哈夫曼树构造算法,哈夫曼编码,Huffman压缩算法。 需要的硬件设施与开发软件:一台计算机,并安装了Visual C++. 四·分析与实现 Huffman树中,叶子结点包含字符以及对应的字符频度(权值) struct HTNode{ //压缩用Huffman树结点 unsigned long weight; //字符频度(权值) unsigned int parent,lchild,rchild; };

使用哈夫曼编码能够对文件进行压缩,由于字符的哈夫曼编码以比特为单位,而当将哈夫曼编码以压缩文件进行存储时,压缩文件最少以字节为单位进行存储,因此需要定义字节缓冲器,以便自动将比特转换为字节,定义如下: struct Buffer{ //字节缓冲压缩用Huffman树 char ch; //字节 unsigned int bits; //实际比特数 }; 定义哈夫曼树的抽象基类模板,实现建树,压缩,解压等功能 class HuffmanTree{ //Huffman树 public: void Code(); //编码 void UnCode(); //译码 private: HTNode HT[m+1]; //树结点表(HT[1]到HT[m]) char Leaf[n+1]; //叶结点对应字符(leaf[1]到leaf[n]) char *HuffmanCode[n+1]; //叶结点对应

最新数据结构课程设计题目

数据结构课程设计 一、考核方法和内容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照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.家谱管理系统的设计与实现 6.集合的并、交和差运算的程序 7.运动会分数统计 8.一元多项式计算器 9.文章编辑 10.哈夫曼树及其编码 11.校园导游咨询 12.通讯录管理系统的设计与实现——单链表 13.地图着色问题 14.内部排序算法比较 15.火车售票系统 16.图书管理系统 17.客户消费积分管理系统 18.产品进销存管理系统

数据结构课程设计报告撰写要求

数据结构课程设计报告撰写要求 (一)纸张与页面设置 1.采用国际标准A4型打印纸或复印纸,纵向打印。 2.页边距:上3.5cm、下2.5cm、左边距3.0cm,右边距2.5cm。 3.页眉2.5cm、页脚1.8cm、对称页边距。 (二)页眉 “沈阳航空工业学院课程设计报告”,五号楷体,居中。 (三)页脚 标页码,五号宋体,居中。 (四)题目、摘要、关键词 题目:小二号黑体,居中。 (五)标题 一级标题,三号粗宋体,居中,用“1 ”、“2 ”、“3 ”…等表示序号。 二级标题,小三号粗宋体,左对齐,用“1.1”、“1.2”、“1.3”…等表示序号。 三级标题,四号粗宋体,左对齐,用“1.1.1”、“1.1.2”、“1.1.3”…等表示序号。(六)正文 小四号宋体,两端对齐,1.5倍行距。 (七)图、表 1.表头包括:表标识及表名两部分,表头在表上,居中,用五号宋体字。 2.图头包括:图标识及图名两部分,图头在图下,居中,用五号宋体字。 (八)参考文献 格式:[序号]作者.译者.书名.版本.出版社,出版时间 (九)报告封页及模版见下页

沈阳航空工业学院 课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:PRIM算法求最小生成树 院(系):计算机学院 专业:计算机科学与技术 班级:7401102班 学号:200704011030 姓名: 指导教师:郑志勇

目录 沈阳航空工业学院 ...................................................................................................... - 2 - 1 需求分析 (1) 1.1题目内容及要求 (1) 1.2题目分析 (1) 2 系统设计 (3) 2.1数据结构设计 (3) 2.2函数设计 (4) 2.2.1系统流程 (5) 图2.2.1 系统流程 (5) 2.2.2 PRIM 函数流程 (5) 2.2.3 Huitu函数流程 (6) 2.2.4 GraphicVer函数输出邻接矩阵 (6) 3 调试分析 (7) 3.1调试初期 (7) 3.2调试中期 (7) 3.3调试后期 (9) 4 测试及运行结果 (10) 4.1欢迎界面 (10) 4.2获取输入,绘制无向图 (10) 4.3输出邻接矩阵 (13) 4..4.演示PRIM算法生成最小生成树 (13) 4.5用户退出 (14) 参考文献 (15) 附录(关键部分程序清单) (16)

数据结构课程设计题目表

《数据结构》课程设计课题表 课题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)。

数据结构课程设计报告

《数据结构课程设计》报告 题目:课程设计题目2教学计划编制 班级:700 学号:09070026 姓名:尹煜 完成日期:2011年11月7日

一.需求分析 本课设的任务是根据课程之间的先后的顺序,利用拓扑排序算法,设计出教学计划,在七个学期中合理安排所需修的所有课程。 (一)输入形式:文件 文件中存储课程信息,包括课程名称、课程属性、课程学分以及课程之间先修关系。 格式:第一行给出课程数量。大于等于0的整形,无上限。 之后每行按如下格式“高等数学公共基础必修6.0”将每门课程的具体信息存入文件。 课程基本信息存储完毕后,接着给出各门课程之间的关系,把每门课程看成顶点,则关系即为边。 先给出边的数量。大于等于0的整形。 默认课程编号从0开始依次增加。之后每行按如下格式“1 3”存储。此例即为编号为1的课程与编号为3的课程之间有一条边,而1为3的前驱,即修完1课程才能修3课程。 例: (二)输出形式:1.以图形方式显示有向无环图

2.以文本文件形式存储课程安排 (三)课设的功能 1.根据文本文件中存储的课程信息(课程名称、课程属性、课程学分、课程之间关系) 以图形方式输出课程的有向无环图。 拓展:其显示的有向无环图可进行拖拽、拉伸、修改课程名称等操作。 2.对课程进行拓扑排序。 3.根据拓扑排序结果以及课程的学分安排七个学期的课程。 4.安排好的教学计划可以按图形方式显示也可存储在文本文件里供用户查看。 5.点击信息菜单项可显示本人的学好及姓名“09070026 尹煜” (四)测试数据(见六测设结果)

二.概要设计 数据类型的定义: 1.Class Graph即图类采用邻接矩阵的存储结构。类中定义两个二维数组int[][] matrix 和Object[][] adjMat。第一个用来标记两个顶点之间是否有边,为画图服务。第二个 是为了实现核心算法拓扑排序。 2.ArrayList list用来存储课程信息。DrawInfo类是一个辅助画图的类,其中 包括成员变量num、name、shuxing、xuefen分别代表课程的编号、名称、属性、 学分。ArrayList是一个DrawInfo类型的数组,主要用来在ReadFile、DrawG、DrawC、SaveFile、Window这些类之间辅助参数传递,传递课程信息。 3.Class DrawInfo, 包括int num;String name;String shuxing;float xuefen;四个成员变量。 4.Class Edge包括int from;int to;double weight;三个成员变量。 5.Class Vertex包括int value一个成员变量。 主要程序的流程图: //ReadFile.java

14级数据结构课程设计格式要求讲解

数据结构课程 课程设计 题目 院(系) 专业班级 学生姓名 学号 设计地点 指导教师 起止时间:2016年5月25 日至2016年6月8 日

数据结构课程设计任务分配

录 (右对齐) 1 绪论1 1.1 课程设计目的 (1) 1.2一个电厂的生产环境 (2) 1.2.1一个电厂的生产环境 (2) 2需求分析 (2) 2.1 页眉、页脚说明 (2) 2.2 段落、页面设置、字体说明 (2) 2.3 公式、插图和插表说明 (2) 5 总结体会 (5) 1 绪论....................................................................... 错误!未定义书签。 1.1课题设计的目的 ............................................ 错误!未定义书签。 1.2课题设计的意义 ............................................ 错误!未定义书签。 1.3 问题描述 2 需求分析................................................................. 错误!未定义书签。 3 设计思路................................................................. 错误!未定义书签。 4 详细设计................................................................. 错误!未定义书签。 5 数据测试................................................................. 错误!未定义书签。 6 总结体会................................................................. 错误!未定义书签。参考文献..................................................................... 错误!未定义书签。附录源代码................................................................. 错误!未定义书签。

相关主题
文本预览
相关文档 最新文档