数据结构课程设计(附代码)

合集下载

数据结构课设报告规范 数据结构课设 Python课程设计 源代码 实验报告 源码 世界杯查询系统

数据结构课设报告规范  数据结构课设 Python课程设计 源代码 实验报告 源码 世界杯查询系统
top=NULL;
Ssize=0;
}
~lnkStack(){
clear();
}
void clear(){
while(top!=NULL){
Link<T> *tmp=top;
top=top->next;
delete tmp;
}
Ssize=0;
}
bool SisEmpty(){
if(Ssize==0)
return true;
世界杯查询系统
一.【需求分析】
1.输入
1.1.1输入来自3个文本文件.
1.1.2c.txt用于输出比赛的详细信息,如两队的队名,比分,进球球员姓名,进球时间等。
1.1.3file.txt用于输出对阵时间表。
1.1.4射手榜存档.txt用于存放进球球员的信息(姓名,国籍,进球数初始均设为1)。
2.输出
{
// TODO: Add your control notification handler code here
int point1;//比赛国家1比分
int point2;//比赛国家2比分
lnkList<xinxi> jinqiu;//比赛详细比分存入队列名为jinjiu,类定义为xinxi的队列中
};
2.1.2信息类
class xinxi{
public:
string time;
string country;
按下“某场比赛”则会在下方编辑框显示该场比赛的详细信息。
按下“射手榜”则会在下方编辑框显示该届世界杯结束后的射手榜。
按下“退出系统”则会清空编辑框以便下次输入。
二【数据结构设计】

数据结构课程设计(C++)_八皇后动态演示原代码

数据结构课程设计(C++)_八皇后动态演示原代码

//运行环境TC3.0#include<math.h> //调用数学函数库#include<stdio.h> //调用标准输入输出函数库#include<conio.h>#include<graphics.h> //调用图形函数库#include<stdlib.h>#define MAX 8 //定义棋盘格数(特别是横轴方向上)int board[MAX]; //纵轴方向格数void Drow() //画棋盘{int i;int Driver=VGA,Mode=VGAHI; //初始化显示器initgraph(&Driver,&Mode,"d:\\tc\\bgi");setfillstyle(SOLID_FILL,BLUE); //棋盘底色模式bar(5,15,600,500); //棋盘外框(二维)setcolor(YELLOW); //棋盘边框颜色for(i=0;i<=9;i++){line(10,20+50*i,460,20+50*i); //画行}for(i=0;i<=9;i++){line(10+50*i,20,10+50*i,470); //画列}line(460,20,560,20);line(10,470,560,470);line(560,470,560,20);setcolor(RED);outtextxy(465,30,"WuShangjie"); //版权注释outtextxy(465,45,"Eight Queue");outtextxy(465,60,"CopyRight2.0");outtextxy(415,440,"Start"); //屏幕输出文本坐标标记outtextxy(385,440,"0");outtextxy(335,440,"1");outtextxy(285,440,"2");outtextxy(235,440,"3");outtextxy(185,440,"4");outtextxy(135,440,"5");outtextxy(85,440,"6");outtextxy(35,440,"7");outtextxy(415,455,"Point");outtextxy(435,390,"0");outtextxy(435,340,"1");outtextxy(435,290,"2");outtextxy(435,240,"3");outtextxy(435,190,"4");outtextxy(435,140,"5");outtextxy(435,90,"6");outtextxy(435,40,"7");}void DrowCircle(int i,int j) //话棋子{char text[80];setfillstyle(SOLID_FILL,YELLOW);setcolor(YELLOW);circle(385-50*i,395-50*j,15);floodfill(385-50*i,395-50*j,YELLOW); //圆内颜色填充setcolor(RED);sprintf(text,"%d,%d",i,j); //棋子上坐标标记outtextxy(385-50*i-14,395-50*j,text);}void GiveDrowIn(int i,int j) //过去显示棋子清除{setfillstyle(SOLID_FILL,BLUE); //将填充颜色设置与底色相同setcolor(BLUE); //将画笔颜色设置与底色相同circle(385-50*i,395-50*j,15);floodfill(385-50*i,395-50*j,BLUE); //一定区域内填充outtextxy(385-50*i-14,395-50*j," ");}void show_result() //调度相关算法求出所有结果{int j=0;while(j<MAX){DrowCircle(j,board[j]);getch();j++;}getch();for(j=0;j<MAX;j++){GiveDrowIn(j,board[j]); //释放上回显示棋子区域}getch();}int check_cross(int n) //判断棋子是否冲突函数{int k;for(k=0;k<n;k++){if(board[k]==board[n]||(n-k)==abs(board[k]-board[n])) //是否同行,是否同对角线return 1;}return 0;}void put_chess(int n) //八皇后摆列方式逐个显示函数{for(int l=0;l<MAX;l++){board[n]=l;if(!check_cross(n)){if(n==MAX-1) {getch();show_result();}else put_chess(n+1);}}}void main() //主函数{Drow();put_chess(0);//to the end of the programgetch();exit(1);}免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。

数据结构课程设计——约瑟夫环报告(含代码)

数据结构课程设计——约瑟夫环报告(含代码)

#include<stdio.h>#include<stdlib.h>typedef struct LNode{//数据域int cipher; //密码int number; //编号struct LNode *next; //指针域}LNode,*LinkList;void InitList(LinkList &L) //创建一个只有头结点链表{L = (LinkList)malloc(sizeof(LNode));if(!L){exit(1);printf("/n/nError!/n/n");}L->next = L;}void CreateList(int n,LinkList &L) //初始化循环单链表{LinkList p,q;q = L;printf("分别输入每个人的密码:");for(int i = 1;i <= n;i++){int k;scanf("%d",&k);if(k <= 0){printf("\n\n密码有误!\n\n");exit(1);}p = (LinkList)malloc(sizeof(LNode));if(!p){exit(1);printf("/n/nError!/n/n");}p->cipher = k;p->number = i;L->next = p;L = p;}L->next = q->next;free(q);}void PrintList(int x,int n,LinkList L) //输出出列顺序{LinkList p,q;p = L;for(int i = 1;i <= n;i++){for(int j = 1;j < x;j++)p = p->next;q = p->next;x = q->cipher;printf("%d ",q->number);p->next = q->next;free(q);}}int main(){printf("=============约瑟夫环==============\n\n\n");int n,x;LinkList L;L = NULL;InitList(L); //构造空链表printf("输入初始密码:");scanf("%d",&x); //初始密码为xprintf("\n");printf("输入参与总人数:");scanf("%d",&n); //总共的人数nprintf("\n");CreateList(n,L); //建立好一个约瑟夫环printf("\n\n\n===================================\n\n");printf("出列编号为:");PrintList(x,n,L); //输出出列顺序printf("\n\n");return 0;}。

c++数据结构课程设计代码

c++数据结构课程设计代码

c++数据结构课程设计代码以下是一个简单的C++数据结构课程设计示例,它实现了一个基本的链表数据结构:cpp.#include <iostream>。

// 定义链表节点结构。

struct Node {。

int data;Node next;};// 链表类。

class LinkedList {。

private:Node head; // 头节点指针。

public:// 构造函数。

LinkedList() {。

head = nullptr;}。

// 插入节点到链表头部。

void insert(int value) {。

Node newNode = new Node;newNode->data = value;newNode->next = head;head = newNode;}。

// 删除节点。

void remove(int value) {。

Node currNode = head;Node prevNode = nullptr;while (currNode != nullptr && currNode->data != value) {。

prevNode = currNode;currNode = currNode->next;}。

if (currNode == nullptr) {。

std::cout << "节点不存在" << std::endl; return;}。

if (prevNode == nullptr) {。

head = currNode->next;} else {。

prevNode->next = currNode->next;}。

delete currNode;}。

// 打印链表。

void print() {。

Node currNode = head;while (currNode != nullptr) {。

数据结构课程设计报告含代码完整版

数据结构课程设计报告含代码完整版

数据结构课程设计报告含代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。

二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。

以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

2.为来访客人提供图中任意景点相关信息的查询。

3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

三.概要设计1.功能模块图;2.各个模块详细的功能描述。

1. 可以手动创建一个校园图。

2. 可以直接从文件读取校园各个景点的信息。

3. 可选择从任意个景点作为起点进行遍历。

4. 输入景点序号查询该景点相关信息。

5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。

6. 将校园图信息保存入文件。

四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g即结构体对象在main()中被创建在其他子函数中进行参数传递。

2. 全局变量visited数组中用。

3. 全局变量shorest[][],path[][]在floyd()中被赋值来分别记录v[i]-v[j]最短路径和 v[i]-v[j]所经过景点。

3.重点设计及编码两景点最短距离弗洛伊德算法void floyd(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}五.测试数据及运行结果1.正常测试数据和运行结果要求提供3组正常测试数据和运行结果2(遍历功能)1(起始景点序号)1 校门呈长方形,校训:爱国、求实、奋进2 喷泉呈鸽子形状,喷射出水花3 教学楼传授知识和学习知识4 实验楼供学生进行课程实验和教师办公5 洗浴中心供学生洗澡,内设单人间和双人间6 美食广场仅一层,快餐味道不错7 图书馆共七层,存储大量书籍供学生查阅和学习8 旭日苑共三层,主要的就餐场所9 体育馆内设篮球场,羽毛球场和观看席10 宿舍休息的场所5(查询景点信息)2(景点序号)2 喷泉呈鸽子形状,喷射出水花6(查询两景点最短路径)1 9(两景点序号)1->2->7->91->9 最短距离:570米2.异常测试数据及运行结果要求提供2组异常测试数据和运行结果9无此功能模块请重新输入5(功能模块)11(景点序号)无此景点请重新输入六.调试情况,设计技巧及体会1.改进方案1. 可将景点文件,边文件及账户密码合并为一个文件。

数据结构课程设计报告模板(内附C代码)

数据结构课程设计报告模板(内附C代码)

数据结构课程设计报告学院专业:软件工程班级:学号:学生姓名:指导老师:彭伟民日期: 2016.01.01目录1猴子吃桃子问题 (3)1.1 需求分析 (3)1.2 程序设计思想 (3)1.3 程序源代码 (3)1.4 程序运行结果 (5)2进制数转化问题 (5)2.1 需求分析 (5)2.2 程序设计思想 (6)2.3 程序源代码 (6)2.4 程序运行结果 (7)3长整数运算 (8)3.1 需求分析 (8)3.2 程序设计思想 (8)3.3 程序源代码 (8)3.4 程序运行结果 (12)4学生成绩管理系统 (13)4.1 需求分析 (13)4.2 程序设计思想 (13)4.3 程序源代码 (14)4.4 程序运行结果 (20)5哈夫曼编码应用 (22)5.1 需求分析 (22)5.2 程序设计思想 (22)5.3 程序源代码 (23)5.4 程序运行结果 (24)6学校超市选址问题 (26)6.1 需求分析 (26)6.2 程序设计思想 (26)6.3 程序源代码 (26)6.4 程序运行结果 (30)7学生成绩管理系统 (30)7.1 需求分析 (30)7.2 程序设计思想 (30)7.3 程序源代码 (30)7.4 程序运行结果 (36)8排序综合 (37)8.1 需求分析 (37)8.2 程序设计思想 (38)8.3 程序源代码 (38)8.4 程序运行结果 (46)9课程设计总结 (47)1猴子吃桃子问题1.1需求分析有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。

用多种方法实现求出原来这群猴子共摘了多少个桃子。

1.2程序设计思想已知第十天只余下1个桃子,第一天开始每天都吃当前桃子一半再多一个,那么就只需要从第十天开始倒推即可,用链表、数组、递推、常规方法都可以采用这种思路实现计算第一天桃子数量。

1.3程序源代码#include<iostream>using namespace std;//有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。

数据结构课设(完整代码可直接运行)附注释

数据结构课设(完整代码可直接运行)附注释
typedef struct {
char adjvex;//最小生成树的节点
int lowcost;//到该节点的最小权值开销
}closedges[MAX_VERTEX_NUM];
int option; //图的类型标识符
int visited[MAX_VERTEX_NUM]; //顶点访问标记数组
for(i=1;i<=G.vexnum;++i) {//输入矩阵的各顶点
fflush(stdin); //清除缓存,略过
scanf("%c",&G.vexs[i]);
}//for
if(G.kind==DG||G.kind==UDG){//1.有向图和无向图的矩阵创建
for(i=1;i<=G.vexnum;i++)//矩阵初始化
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;
}
*S.top++=e;
return OK;
}
/*·················元素出栈··········*/
int Pop(SqStack &S,int &e){
··········*/
int LocateVex(ALGraph G,char v){
int m;
for(m=1;m<=G.vexnum;m++){
if(G.vertices[m].data==v) return m;
}
printf("您输入的顶点不存在");

数据结构课程设计 文章编辑 源代码

数据结构课程设计 文章编辑 源代码

#include <stdio.h>#include<stdlib.h>#include <string.h>#include<malloc.h>#define MAXSIZE 1000typedef char DataType;typedef struct node{DataType ch[MAXSIZE];struct node *next;}Lstring;/*****输入文章*****/Lstring *input(){Lstring *p,*head;int i=0;printf ("请输入一页文章,若要换行,请直接敲回车键,若想结束请按@:\n");p=(Lstring *)malloc(sizeof(Lstring));head=p;p->ch[i]=NULL;p->next=NULL;char str[200];while(1){gets(str);if(strlen(str)>100){printf("每行最多输入100字符");break;}if(str[0]==64){str[0]='\0';p->ch[0]=str[0];break;}p->next=(Lstring *)malloc(sizeof(Lstring));strcpy(p->ch,str);if(str[strlen(str)-1]==64){p->ch[strlen(str)-1]='\0';break;}p=p->next;}p->next=NULL;return head;}/****输出文章*****/Lstring *OutPut(Lstring *head){Lstring *p=head;do{printf("%s\n",p->ch);}while((p=p->next)!=NULL);return head;}/****统计字母的个数*****/int Alphabet(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if((p->ch[i]>='a'&&p->ch[i]<='z')||(p->ch[i]>='A'&&p->ch[i]<='Z')) count++;}while((p=p->next)!=NULL);return count;}/****统计数字的字数*****/int Num(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]>='0' && p->ch[i]<='9')count++;}while((p=p->next)!=NULL);return count;}/****统计空格的字数*****/int Space(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]==32)count++;}while((p=p->next)!=NULL);return count;}/*统计文章的总字数*/int All(Lstring *head){Lstring *p=head;int count=0;do{count+=strlen(p->ch);}while((p=p->next)!=NULL);return count;}/****串的简单模式匹配*****/int FindString(Lstring *head,char *str){Lstring *p=head;int count=0;int h=0;int len1=0;int len2=strlen(str);int i,j,k;do{len1=strlen(p->ch);for(i=0;i<len1;i++){if(p->ch[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->ch[i+j]==str[j]) k++;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);return count;}void delstringword(char *s,char *str){char *p;int count,len,i,j;char s1[80];p=strstr(s,str);len=strlen(s);i=len-strlen(p);j=i+strlen(str);count=0;for(int m=0;m<i;m++)s1[count++]=s[m];for(int n=j;n<len;n++)s1[count++]=s[n];s1[count]='\0';strcpy(s,s1);}Lstring *DelString(Lstring *head,char *str){Lstring *p=head;do{while(strstr(p->ch,str)!=NULL)delstringword(p->ch,str);}while((p=p->next)!=NULL);return head;}void main(){int i=0;int m;Lstring *head;char s1[20],s2[20];head=input();printf("输入的文章为:\n");head=OutPut(head);printf("\n");printf("全部字母数:%d \n",Alphabet(head));printf("数字个数:%d \n",Num(head));printf("空格个数: %d \n",Space(head));printf("文章总字数: %d \n",All(head));printf("\n");printf("**********************\n");printf("* 菜单 *\n");printf("**********************\n");printf("* 1---统计字符串 *\n");printf("* 2---删除字符串 *\n");printf("* 0---退出 *\n");printf("**********************\n");do{printf("请输入你要选择的操作(0~2):");scanf("%d",&m);switch(m){case 0:exit(0);break;case 1:printf("请输入要统计的字符串:");scanf("%s",&s1);printf("%s在文章中出现的次数为:%d \n",s1,FindString(head,s1));printf("\n");break;case 2:printf("请输入要删除的某一字符串:");scanf("%s",&s2);head=DelString(head,s2);printf("删除%s后的文章为:\n",s2);OutPut(head);break;}}while(m!=0);}。

数据结构课程设计代码

数据结构课程设计代码

数据结构课程设计代码根据提供的输入输出需求,下面是一个示例的数据结构课程设计代码。

```pythonclass Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef add(self, data):new_node = Node(data)if self.head is None:self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef remove(self, data):current = self.headprev = Nonewhile current is not None:if current.data == data:if prev is None:self.head = current.next else:prev.next = current.next returnprev = currentcurrent = current.nextdef display(self):current = self.headwhile current is not None:print(current.data, end=" ")current = current.nextprint()if __name__ == "__main__":linked_list = LinkedList()while True:print("1. Add element")print("2. Remove element")print("3. Display elements")print("4. Quit")choice = input("Enter your choice: ")if choice == "1":data = input("Enter element to add: ")linked_list.add(data)elif choice == "2":data = input("Enter element to remove: ")linked_list.remove(data)elif choice == "3":linked_list.display()elif choice == "4":breakelse:print("Invalid choice")```这个代码示例实现了一个简单的链表数据结构,在命令行中提供了添加元素、删除元素和显示元素的选项。

数据结构课程设计源代码(完整版)

数据结构课程设计源代码(完整版)

算法与数据结构课程设计报告设计题目:专业班级学生学号指导教师2014年第1学期第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。

要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

2、要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。

(2)作为模拟系统,全部数据可以只存放在内存中。

(3)通过此系统可以实现如下功能:①录入功能:可以录入航班情况②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。

也可以根据航班号,查询飞机某个航线的情况。

③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。

如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。

④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。

第二部分:系统设计图样一:设计说明1:添加航班:整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。

航班信息通过lulu()函数进行添加。

添加的信息保存在航班flight结构体数组中。

2:查询航班:查询板块分为两个部分,按姓名查找和按站名查找。

按姓名查找:通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。

按站名查找:通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。

3:订票功能:根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。

数据结构课程设计报告(附源代码)-学生管理系统

数据结构课程设计报告(附源代码)-学生管理系统

课程设计报告(一)一.报告题目:学生管理系统二.实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。

3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。

三.实验环境:C语言编程,VC++6.0编程工具实现。

四.软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数6:文件装入功能实现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五.软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。

本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud{ long num;char name[NAMELEN+1];char sex;int age;char Addr[ADDRLEN+1];long rxsj;char lxfs[TELLEN+1];};typedef stud ElemType;//链表结点元素为结构体FILE *fp;typedef struct LNode{ElemType data;LNode *next;} *LinkList;//typedef LNode *;int InitList(LinkList &L){ //操作结果:构造一个空的线性表LL=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点if(!L)//存储分配失败exit(OVERFLOW);L->next=NULL;// 指针域为空return OK;}int ListTraverse(LinkList L,void(*vi)(ElemType)){//条件:线性表已存在//操作结果:一次对L的每个数据元素调用函数vi()。

数据结构课程设计报告(有代码 C语言)-仓库管理系统

数据结构课程设计报告(有代码 C语言)-仓库管理系统

第一章系统目标〔三号楷体加粗〕仓库管理应用程序系统可以实现信息屡次追参加录、信息显示、删除信息、修改信息、查询信息、价格升序等根本功能,这些功能模块都用函数的形式来实现。

学生信息保存在文件中,需要时可以随时从文件中读取出来。

方便用户随时可查询。

进行仓库管理。

第二章系统分析〔三号楷体加粗〕正文〔四号楷体〕明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。

开始运行时界面如下:你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。

第三章系统设计第四章系统实现正文〔四号楷体〕给出具体的实现环境〔如用什么语言?在什么操作系统?〕用C语言编程,用cokeblock编译器,在windows xp操作系统下编译成功。

给出主函数和每个算法的实现代码。

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>#include<string.h>#define SIZE 100typedef struct{char name[10];char fam[10];int pay;int num;}Store;typedef struct node{Store elem;struct node *next;}In;In *head=NULL;void appendInfo();void List();void menu(void);In*Init();void Start();void Insert();void Del();void renew();void Wsave();void Read();void SortUp();void PreFile();int main(){char select;PreFile();menu();while((select=toupper(getch()))!='0'){system("cls");switch (select){case '1' :{Start();system("pause");menu();break;}case '2':{appendInfo();system("pause");menu();break;}case '3':{Insert();system("pause");menu();break;}case '4':{Del();system("pause");menu();break;}case '5':{renew();system("pause");menu();break;}case '6':{List();system("pause");menu();break;}case '7':{SortUp();system("pause");menu();break;}case 'W':{Wsave();system("pause");menu();break;}case 'R':{Read();system("pause");menu();break;}default:printf("Input error!\n");system("pause");menu();break;}}return 0;}In*Init(){In*L;L=(In*)malloc(sizeof(In));L->next=NULL;return L;}void appendInfo(){int i,j;In*p,*s;A1:printf("请输入要存放的记录数:");scanf("%d",&j);if(j<=0){printf("Input error!\n");goto A1;}if(head==NULL){p=Init();head=p;}else{p=head->next;while(p->next!=NULL)p=p->next;}for(i=0;i<j;i++){s=Init();printf("名称品牌单价数量\n");scanf("%s",&s->);scanf("%s",&s->elem.fam);scanf("%d",&s->elem.pay);scanf("%d",&s->elem.num);p->next=s;p=s;}}void List(){In *p;if(head==NULL){printf("None of information about products.\n");return;}elsep=head->next;printf("名称品牌单价数量\n");while(p!=NULL){printf("%s\t%s\t%d\t%d\n",p->,p->elem.fam,p->elem.pay,p->elem.num);p=p->next;}}void menu(){system("cls");printf("|-------------------------------------------|\n");printf(" |---------------家电仓库管理----------------|\n");printf(" | 请输入选项编号|\n");printf("|-------------------------------------------|\n");printf(" | 1--数据初始化|\n");printf(" | 2--创立数据表|\n");printf(" | 3--数据插入|\n");printf(" | 4--数据删除|\n");printf(" | 5--数据更新|\n");printf(" | 6--数据查询|\n");printf(" | 7--单价升序|\n");printf(" | w--数据保存|\n");printf(" | r--数据读出|\n");printf(" | 0--系统退出(exit) |\n");printf("|-------------------------------------------|\n");printf("请输入你的选择:");}void Start(){char com;printf("你想清空所有资料吗?〔Y/N〕:");fflush(stdin);com=getchar();if(com=='Y'||com=='y'){printf("已经初始化了、、、\n");head=NULL;return;}else printf("资料仍在、、、\n");return ;}void Insert(){In*pi,*p;char str[10];printf("请问要在哪个学生后面插入〔输入姓名〕:");fflush(stdin);gets(str);pi=Init();printf("名称品牌单价数量\n");scanf("%s",&pi->);scanf("%s",&pi->elem.fam);scanf("%d",&pi->elem.pay);scanf("%d",&pi->elem.num);if(head==NULL){printf("前面没有数据,默认接在表头。

大二数据结构课程设计代码

大二数据结构课程设计代码

大二数据结构课程设计代码一、课程目标知识目标:1. 学生能够掌握数据结构的基本概念和原理,包括线性表、树、图等结构的特点和应用场景。

2. 学生能够理解和运用常用的算法,如排序算法、查找算法、遍历算法等,并能够分析其时间复杂度和空间复杂度。

3. 学生能够掌握代码编写规范和调试技巧,编写出结构清晰、可读性强、效率高的数据结构实现代码。

技能目标:1. 学生能够运用所学的数据结构知识,设计并实现小型数据结构项目,解决实际问题。

2. 学生能够运用编程语言(如C/C++/Java等)进行数据结构相关算法的实现和优化,具备一定的代码调试能力。

3. 学生能够通过团队协作和交流,合理分工,共同完成课程设计任务,提高项目管理和团队协作能力。

情感态度价值观目标:1. 学生培养对数据结构学科的兴趣和热情,认识到数据结构在计算机科学中的重要性。

2. 学生在学习过程中,树立良好的编程习惯,注重代码质量,培养认真、严谨的学习态度。

3. 学生能够通过课程设计,体验解决实际问题的成就感,增强自信心,激发进一步探索数据结构领域的欲望。

本课程目标旨在帮助学生系统地掌握数据结构知识,培养实际编程能力,同时注重培养团队协作和情感态度价值观,使学生在理论知识与实践操作中找到平衡,为后续相关课程和实际工作打下坚实基础。

二、教学内容本课程教学内容紧密围绕课程目标,选取以下重点内容进行组织:1. 数据结构基本概念:包括线性表、栈、队列、树、图等结构的基本定义、性质和操作。

2. 常用算法分析:讲解排序算法(冒泡排序、快速排序等)、查找算法(二分查找、哈希查找等)以及遍历算法(深度优先搜索、广度优先搜索等)。

3. 代码编写与调试:介绍编程规范、调试技巧以及性能优化。

4. 数据结构应用实例:分析实际案例,如链表实现、二叉树遍历、图的最短路径等。

教学内容安排如下:第一周:数据结构基本概念及线性表的应用。

第二周:栈、队列和串的基本操作及实现。

第三周:树和二叉树的概念、遍历算法及应用。

数据结构课程设计(附代码)

数据结构课程设计(附代码)

上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求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循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

数据结构课程设计报告及源代码

数据结构课程设计报告及源代码
printf("\n\t**********************************************************\n");
printf("\t1.车辆到达--1 2.车辆离开--2 3.车辆信息--3 4.退出程序--4\n");
printf("\t**********************************************************\n");
4、要求栈以顺序结构实现,队列以链表实现
三、设计要求
1、独立完成全部代码的设计、编写、调试与部署,运行正确无误
2、编写设计报告书
设计报告书应包括:
(1)问题描述和系统要求
(2)系统主要功能模块设计
(3)设计中遇到的问题及其解决方法
(4)系统运行报告
(5)总结
问题描述:
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。
typedef struct node
{ int num;
int reachtime;
int leavetime;

学生管理系统数据结构课程设计报告之代码

学生管理系统数据结构课程设计报告之代码

数据构造课程设计学生信息管理系统C语言编写仅供参考:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define LEN sizeof(LNode)typedef struct LNode{//用于存放学生信息节点int stuNumber;char telenum[50];int age;char chass[50];char deptName[50];/*char zhuanYe[50];char adress[50];*/char name[20];struct LNode *next;}LNode,*Link;//****************创立链表结点************************************************************************** Link createLink(Link L){ //初始化定义函数,声明变量void inserStu(Link L,Link Elem);//定义插入函数int count(Link L);int temp;temp=count(L);printf("节点个数为%d:\n",temp);Link p;int num=1, stuNumber;char telenum[50];char name[20];int age;/* char deptName[50];char adress[50];char zhuanYe[50];*/char chass[50];//开场输出学生信息while(1){printf("请输入学生的信息:学号,,年龄,班级,院系,专业,家庭住址,\n");printf("学号输入负数完毕!\n");printf("请输入学号%d: ",num);scanf("%10d",&stuNumber);if(stuNumber<0) {break;}printf("请输入%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入: ",num);getchar();gets(telenum);/* printf("请输入院系%d: ",num);getchar();gets(deptName);*/if(stuNumber>=0){p=(Link)malloc(LEN);p->stuNumber=stuNumber;strcpy(p->chass,chass);/* strcpy(p->deptName,deptName);*/p->age=age;strcpy(p->telenum,telenum);strcpy(p->name,name);//插入新结点inserStu(L,p);num++;}}return (L);}//******************打印头结点为L的学生记录********************************************************void printList(Link L){printf("\n*********************学号,,年龄,班级,**************************\n");printf("\n 学号年龄专业班级\n");int n=1;Link p=L;int count(Link L);int temp;temp=count(L);//结点个数:if(temp==0)printf("系统中没有元素\n");//判断学生管理系统中有无信息elsewhile(p->next!=NULL){printf("%2d %-9d",n,p->next->stuNumber);printf("%-8s %-5d %-12s %s \n",p->next->name, p->next->age,p->next->chass,p->next->telenum/*p->next->deptName*/);//首个字符打印不出来p= p->next;n++;}printf("\n****************************************************************************** *****\n");return;}//********************************插入学生信息**************************************void inserStu(Link L,Link Elem){Link prior(Link L,Link p);Link p=L->next;//*******%%%%****while(p!=NULL&&Elem->stuNumber>=p->stuNumber){if(p->stuNumber==Elem->stuNumber){printf("重复输入学号,输入失败!");return ;}p=p->next;}//确定Elem的插入位置if(p==NULL){p=prior(L,p);Elem->next=NULL;p->next=Elem;//假设为空表,插入到头结点之后}else{p=prior(L,p);Elem->next=p->next;p->next=Elem;}}//***********************找到当前地址元素的前一元素的地址*************************************************************************Link prior(Link L,Link p){if(L->next==NULL)return(L);Link p_prior=L;while(p_prior->next!=p){p_prior= p_prior->next ;}return (p_prior);}//********************************8按学号查询学生信息***************************************************************************int searchName(Link L,char n[]){int flag=0;//标志要查找的学生和学生记录中的是否匹配Link p=L->next;int seat=1;if(L->next==NULL||L==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(!strcmp(p->name,n))//比拟要查找的是否和当前学生信息所指的匹配{flag=1;//输入匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}p=p->next ;seat++;}}return flag;}//****************************************按学号查找学生信息*********************************************************************int searchNum(Link L,int n){int flag=0;//标志要查找的学生和管理信息系统中的学号是否匹配Link p=L->next;int seat=1;if(L->next==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(p->stuNumber<=n){if(p->stuNumber==n)//比拟要查找的学号是否和当前学生信息所指的学号匹配{flag=1;//输入学号匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}}p=p->next ;seat++;}}return flag;}//*******************************从通讯录中删除第i个元素***************************************************************************void deleteElem(Link L,int i){Link p=L;int j=0;while(p->next&&j<i-1){p= p->next;j++;}if(!(p->next))//判断i时候合法,i不能大于元素的个数,也不能小于等于0{printf("第%d个学生删除失败\n",i);return;}Link q=p->next;p->next=q->next;free(q);}//*******************按删除学生信息******************************************************************************************** **int deleName(Link L, char n[]){ void deteStu(Link);int flag=0;//判断要删除的学生与系统中的是否匹配Link p=L->next;int seat =1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);} else{while(p!=NULL){if(!strcmp(p->name ,n))//比拟名字是否匹配{flag=1;printf("%s",p->name );p=p->next;deleteElem(L,seat);//删除第i个学生的信息}else{p=p->next ;seat++;}if(flag)printf("被删除了\n");}}return flag;}//*****************按学号删除学生信息*****************************************************************int deleNum(Link L,int n){ void deteStu(Link);int flag=0;Link p=L->next ;int seat=1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);}else{while(p!=NULL){if(p->stuNumber==n){flag=1;printf("%d",p->stuNumber);p=p->next;deleteElem(L,seat);break;}p=p->next ;seat++;}if(flag){printf("被删除了\n");}else{printf("没有找到学生信息\n");}}return flag;}//************************************************************************************* void searchWay1(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){printf("请输入要查询的学生的学号:\n");int n,s;scanf("%d",&n);s=searchNum(L, n);if(s==0)printf("查找失败\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//********************************************************************************void searchWay2(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){char n[20];int flag;printf("请输入要查询的学生\n");char temp2=getchar();gets(n);flag= searchName(L,n);if(flag==0)printf("查找失败!\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//*****************************************************************8void searchMenu(Link L){int mainMenu();printf(" ********************** 查询菜单************************************** \n");printf(" *** 1 输入学生学号查询学生信息\n");printf(" *** 2 输入学生查询学生信息\n");printf(" *** 3 返回上级菜单\n");printf(" ********************** 查询菜单************************************** \n");printf("请选择1-3: ");int menu;scanf("%d",&menu);switch(menu){case 1:{ searchWay1(L);break;}case 2:{ searchWay2(L);break;}case 3:{break;//跳回主菜单程序}}}//************************************更新学生信息模块*****************************************void alterStu(Link L)//按学号更新学生信息{int n;printf("请输入要修改的学生学号:");scanf("%d",&n);Link p=L->next;if(p==NULL){printf("学生管理系统没有学生信息!");}while(p!=NULL)//循环查找学生信息,如果找到该学号那么进入循环体更改学生信息{//**************************************************************************************** ******if(p->stuNumber==n){int num=1, stuNumber,age;char telenum[50];char name[20];char chass[50];printf("***********************更改学生信息*****************************************\n");printf("请输入学生的学号,和\n");printf("请输入学号%d: ",num);scanf("%d",&stuNumber);printf("请输入%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入: ",num);getchar();gets(telenum);p->age=age;p->stuNumber=stuNumber;strcpy(p->telenum,telenum);strcpy(p->name,name);strcpy(p->chass,chass);//更新新结点printf("***********************更改学生信息完毕*****************************************\n");//****************************************************************************************** *******}p=p->next;}}//****************保存学生信息模块***************************************************************************void keepStu(Link L){Link p=L->next;FILE* fp;if((fp=fopen("student.txt","r"))==NULL)//翻开文件,不存在此文件那么新建{fp=fopen("E:\\测试\\student.txt","w");fclose(fp);}fp=fopen("E:\\测试\\student.txt","a");while(p!=NULL){fprintf(fp,"%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);p=p->next;}fclose(fp);printf("文件保存成功!\n");}//********************统计结点个数模块***********************************************************************************int count(Link L){int n=0;Link p=L->next;if(p==NULL){printf("不存在学生信息\n");}while(p!=NULL){p=p->next;n++;}return n;}//********************************导入学生信息模块**********************************************************************Link stuEntry(){FILE* fp;Link p,q ,L;if((fp=fopen("E:\\测试\\student.txt","r"))==NULL)//翻开文件,不存在此文件那么新建{;}L=q=(Link)malloc(LEN);printf("\n学号手机号\n");printf("**********************************************************\n");while(!feof(fp)){p=(Link)malloc(LEN);fscanf(fp,"%d\t%s\t%s\n",&p->stuNumber,&p->name,&p->telenum);printf("\n%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);q->next=p;q=p;}q->next=NULL;fclose(fp);printf("按任意键完毕:");getch();//返回return L;}//********************添加学生信息**************************************************************************void AddStu(Link L){ int temp;temp=count(L);printf("节点个数为%d:\n",temp);if(temp==0){createLink(L);}//如果没有学生信息那么调用初始化函数createLink(L);}//****************删除学生菜单****************************************************void deteStu(Link L){int flag=0,way,n;printf("\n************************ 删除菜单********************\n");printf("\n选择操作方式************* 1:按学号********************\n");printf(" ************* 2:按********************\n");printf(" ************* 3: 返回主菜单*********************\n");printf("\n请输入删除方式:");scanf("%d",&way);if(way<1||way>3){deteStu(L);}switch (way){case 1: {printf("请输入要删除的学生学号:");scanf("%d",&n);flag= deleNum(L,n);break;}case 2:{char n[20];printf("请输入要删除的学生:");char temp1=getchar();gets(n);flag=deleName(L,n);break;}case 3:{break;}}if(flag){printf("删除成功!\n");deteStu(L);}}//**********************主菜单程序******************************************************************************int mainMenu(){printf("\n****************************欢送使用学生管理信息系统***********************************************\n");printf("* *** 1 输入学生信息**** * \n");printf("* *** 2 显示学生信息**** * \n");printf("* *** 3 查询学生信息**** * \n");printf("* *** 4 更新学生信息**** * \n");printf("* *** 5 添加学生信息**** * \n");printf("* *** 6 删除学生信息**** * \n");printf("* *** 7 保存学生信息**** * \n");printf("* *** 8从文件导入学生信息**** * \n");printf("* *** 0 退出管理信息系统**** * \n");printf("****************************欢送使用学生管理信息系统***********************************************");int menu=0;printf("请选择0-8:");scanf("%d",&menu);if(menu<0&&menu>8){printf("输入无效,请正确输入有效序号0-8:");scanf("%d",&menu);}return menu;}//**************************main()程序******************************************************************************************** *********void main(){Link L=(Link)malloc(LEN);//在主函数上首先让构造体指针初始化;L->next=NULL;int flag=0;//学生信息是否建立int menu=0;//菜单项选择项do{menu=mainMenu();switch(menu)//用于调用子菜单{case 1:{L=createLink(L);break;}case 2:{printList(L); break;}case 3:{searchMenu(L); break;}case 4:{alterStu(L) ;break;}case 5:{createLink(L);break;}case 6:{deteStu( L); break;}case 7:{keepStu( L); break;}case 8:{L=stuEntry();break;}case 0:{return;}}}while(1);}//****************************************************************************************** ************************************。

数据结构课程设计代码

数据结构课程设计代码

#include<iostream.h>#include<stdio.h>#include<malloc.h>#define MAX 25typedef struct{char data;int weight;int parent;int lchild;int rchild;} HTNode;typedef struct{char cd[MAX];int start;} HuffmanCode;int main(){HTNode ht[2*MAX];HuffmanCode hcd[MAX], d;int i, k, f, l, r, n, c, s1, s2;cout<<"\t哈夫曼编码与译码系统\n";cout<<"\n请输入哈夫曼码元素个数:";cin>>n;cout<<"请输入各个元素的结点值与权值:\n";for(i=1;i<=n;i++){cout<<" 第"<<i<<"个元素-->\n\t结点值:";cin>>&ht[i].data;cout<<"\t权值:";cin>>ht[i].weight;}for(i=1;i<=2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=0;for(i=n+1;i<=2*n-1;i++){s1=s2=32767;l=r=0;for(k=1;k<=i-1;k++)if(ht[k].parent==0)if(ht[k].weight<s1){s2=s1;r=l;s1=ht[k].weight;l=k;}else if(ht[k].weight<s2){s2=ht[k].weight;r=k;}ht[l].parent=i;ht[r].parent=i;//得到新结点,删除l.r,将l,r的双亲域由0改为iht[i].weight=ht[l].weight+ht[r].weight;//i的权值等于左右孩子之和ht[i].lchild=l; ht[i].rchild=r; //l,r为i的左右孩子}for(i=1;i<=n;i++){d.start=n+1;//start开始时指向最后,即编码结束符位置c=i;f=ht[i].parent;//f指向结点c的双亲结点while(f!=0)//从叶子结点开始向上回溯,知道根结点{if(ht[f].lchild==c) d.cd[--d.start]='0';//结点c是f的左孩子,则生成代码0elsed.cd[--d.start]='1'; //结点c是f的左孩子,则生成代码1c=f;f=ht[f].parent;//继续向上回溯}hcd[i]=d;//为第i个字符编码分配空间}cout<<"输出哈夫曼编码:\n";for(i=1;i<=n;i++){cout<<ht[i].data<<": ";for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];cout<<"\n";}l: cout<<"\n请选择编码/译码/退出系统: (B/Y/E): ";char hfm;cin>>hfm;if(hfm=='e')return 0;else{switch(hfm)case'b':{int q ;char bs;cout<<"\n哈夫曼编码\n";cout<<"请输入字符代码: "<<endl;for(q=0;bs!=10;q++){bs=getchar();for(i=1;i<=n;i++){if (bs==ht[i].data)for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];}}cout<<endl;} break;case'y':{char e;int t,u;t=2*n-1;cout<<"\n哈夫曼译码\n";cout<<"\n请输入哈夫曼码: "<<endl;for(u=0;e!=10;u++){if(ht[t].lchild!=0){e=getchar();if(e=='0')t=ht[t].lchild;elset=ht[t].rchild;}else{cout<<ht[t].data;t=2*n-1;}}cout<<endl;} break;goto l;}return 0; } //Huffman。

数据结构课程设计报告 (附有完整可运行出来的代码)

数据结构课程设计报告 (附有完整可运行出来的代码)

课程设计报告设计题目:公园导游图一、流程图二、程序代码#include<iostream>using namespace std;#include<stdio.h>typedef struct //定义图结构{int n; /* 图的顶点个数*/char v[100]; /* 顶点信息*/int e[100][100]; /* 边信息*/int shor; /* 最短路径信息*/}park;park *luru(park *x){int j,k;cout<<"请输入公园景点个数"<<endl;cin>>x->n;if(x->n<=0){cout<<"个数输入错误,请重新输入"<<endl;cin>>x->n;}cout<<"请输入景点名称,每个名称只允许一个字符代替"<<endl;for(j=0;j<x->n;j++)cin>>x->v[j];cout<<"请输入景点之间的路径长度,只允许整数型数值,无路径长度的输入0"<<endl;for(j=0;j<x->n;j++)for(k=0;k<x->n;k++){cout<<"请输入第"<<j+1<<"行"<<"第"<<k+1<<"列的路径长度"<<endl;cin>>x->e[j][k];}return x;}int search(park *x){char start,end,temp;int i=0,j=0,temp_1,temp1=10000;cout<<"请输入要查找的起始景点名称"<<endl;cin>>start;while(i<x->n && start!=x->v[i])i++;if(i==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}cout<<"请输入要查找的终点景点名称"<<endl;cin>>end;while(j<x->n && end!=x->v[j]){j++;if(j==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}x->shor=x->e[i][j];temp_1=x->e[i][j];for (int k=0;k<x->n;k++)//两个顶点最小权值判断{if (x->e[i][k]==0||x->e[k][j]==0 )continue;if(x->shor > x->e[i][k] + x->e[k][j]){x->shor = x->e[i][k] + x->e[k][j];temp=x->v[k];}}if(x->shor==0){cout<<"这两个节点中没有连通路,按任意键返回"<<endl;return 0;}if(x->shor==temp_1){cout<<"最短路径信息: "<<start<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;if(x->shor<temp_1 && x->shor<=temp1){cout<<"最短路径信息: "<<start<<"->"<<temp<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;}cout<<"查找失败,按任意键返回"<<endl;getchar();return 0;}int main(){park x;int i=1;luru(&x);do{search(&x);cout<<"是否继续?"<<endl<<"1.继续"<<endl<<"0.退出"<<endl;cin>>i;}while(i!=0);return 0;}三、运行结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求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循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。

5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。

链表长度加一,重新存储。

(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。

(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。

对于,学生成绩记录的文件保存以及按学号、姓名等的查询也是缺少的。

还有就是,对于多个学生成绩的操作也是不够的。

改进的方向:在时间许可的条件下,尽量的完善该系统的各种功能,同时也应修改系统,让它更为人性化、简单化,被广大用户所接受。

(8) 对软件的使用说明该软件是属于比较低级的软件,只是包含了课程设计的要求的几个功能:输入、输出、删除、插入。

所以用户在使用的过程中肯定会受到一定的局限性、不方便性,但由于时间的缘故,无法将软件做到尽善尽美。

2. 项目二(1) 对设计任务内容的概述各种排序任务:用程序实现插入法排序、选择法排序、起泡法改进算法排序;利用插入排序、选择法排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。

输入的数据形式为任何一个正整数,大小不限。

输出的形式:数字大小逐个递增的数列。

(2) 功能描述该函数有以下几个功能:1)对R[0..n-1]按递增有序进行直接插入排序2)对R[0..n-1]按递增有序进行冒泡排序3)对R[0..n-1]按递增有序进行直接选择排序4)排序后的输出5)调用所有排序,实现排序(3) 程序流程图(4) 详细设计void InsertSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接插入排序void BubbleSort(RecType R[],int n):对R[0..n-1]按递增有序进行冒泡排序void SelectSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接选择排序void disp(RecType R[],int n):排序后的输出void Sort():调用所有排序,实现排序(5) 程序模块及其接口描述该程序分为五个模块:1.输入功能:void Sort()建立一个数组存放用户在键盘上输入的关键字,在分别调用各种排序的函数,对关键字进行排序。

2.直接插入排序功能:void InsertSort(RecType R[],int n)将后一个数与前一个数比较,将其插入到第一个比它大的大的数前面,其余数字往后移一个位置。

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

3.冒泡排序功能:void BubbleSort(RecType R[],int n)在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位exchange,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置exchange值为0,在进行数据交换时,修改exchange为非0。

在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序。

4.直接选择排序功能:void SelectSort(RecType R[],int n)在无序区里找最小的数,第i小的数字放在第i个位置上,与原来第i个位置上的数字交换。

5.输出功能:void disp(RecType R[],int n)(6) 程序的输入与输出描述输入:要求是10个为数字的关键字;输出:排序后新的序列。

(7) 程序测试输入关键字,调用各种排序函数(8) 尚未解决的问题或改进方向改进方向:虽然给出了它的各种排序的结果,但是没有它的箱子过程,这是我的改进的方向,希望能将每种排序的过程也能展示给用户,来体现它们的不同。

(9) 对软件的使用说明用户只需根据提示,在键盘上输入要排序的10个关键字。

3. 项目三(1) 对设计任务内容的概述有序表的合并要求输入有序表的数据,利用顺序表和链表结构分布完成两个有序表合并功能,并输出合并后的信息。

(2) 功能描述该程序有如下几个功能:1)初始化顺序表2)初始化链表3)建立顺序表4)尾插法建表5)输出合并后的顺序表6)输出合并后的单链表7)合并顺序表8)合并单链表9)调用以上的函数,实现有序表的合并(3) 概要设计或程序流程图(4) 详细设计void InitList(SqList *&L):初始化顺序表void InitList1(LinkList1 *&L):初始化链表void CreateList(SqList *&L,ElemType a[],int n):建立顺序表void CreateListR(LinkList1 *&L,ElemType a[],int n):尾插法建表void DispList(SqList *L):输出合并后的顺序表void DispList1(LinkList1 *L):输出合并后的单链表void UnionList(SqList *LA,SqList *LB,SqList *&LC):合并顺序表void UnionList1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC):合并单链表void Union():调用以上的函数,实现有序表的合并。

(5) 程序模块及其接口描述程序有以下几个模块:1)初始化、建立顺序表2)初始化、建立链表3)输出合并后的表4)合并表(6) 调试分析或程序测试有序表的合并:(7) 尚未解决的问题或改进方向不足:不能重复使用程序。

(8) 对软件的使用说明用户只需根据界面的提示,采用对应的操作。

4.项目四(1)对设计任务内容的概述建立二叉树,层序、先序、中序、后序遍历(用递归或非递归的方法都可以)**任务:要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数、输出中序遍历序列的函数、输出后序遍历序列的函数;(2)功能描述1)建立二叉树2)输出二叉树3)先序遍历非递归算法:不为空时,访问根--左--右,采用递归的方法。

4)中序遍历非递归算法:不为空时,访问左--根--右,采用递归的方法。

5)后序遍历非递归算法:不为空时,访问左--右--根,采用递归的方法。

6)层序遍历:运用队列,队列不空时,有左孩子将其入队,有右孩子将其入队,同时出队。

7)调用以上函数实现二叉树的各种遍历(3)概要设计或程序流程图(4)详细设计void CreateBTNode(BTNode * &b,char *str):建立二叉树void DispBTNode(BTNode *b):输出二叉树void PreOrder(BTNode *b):先序遍历非递归算法void InOrder(BTNode *b):中序遍历非递归算法void PostOrder(BTNode *b):后序遍历非递归算法void LevelOrder(BTNode *b):层序遍历(5)程序模块及其接口描述(6)程序的输入与输出描述输入二叉树的按层结点值;输出二叉树先序遍历访问结点的顺序;输出二叉树中序遍历访问结点的顺序;输出二叉树后序遍历访问结点的顺序;输出二叉树层次遍历访问结点的顺序;(7)调试分析或程序测试用户从键盘上输入要创建的二叉树结点:(8)尚未解决的问题或改进方向改进方向:希望能将系统改进的更为人性化,让界面更舒适,操作更简单。

(9)对软件的使用说明用户只需按照界面的提示,采取相应的措施,到时界面会提醒用户键盘输入。

5.项目五(1)对设计任务内容的概述猴子选大王**任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

相关文档
最新文档