当前位置:首页 » 课程大全 » 大学数据结构课程设计

大学数据结构课程设计

发布时间: 2020-11-29 23:12:50

⑴ 数据结构课程设计

#include "stdio.h"
#include "time.h"
#define MAXNUM 5 //停车场车位数
#define PRICE 2.0 //每小时收费
typedef struct car //定义车的结构体
{
char num[10]; //车牌号(最多10个字节)
struct tm intime; //进入时间
struct tm outtime; //离开时间
int expense; //费用
int length; //停车时长
int position; //停车位
}CAR;
typedef struct //栈结构
{
CAR car[MAXNUM]; //车辆信息
int top; //栈顶指针
} SeqStack;
void StackInit(SeqStack * s) //初始化栈
{
s->top = -1;
}
int StackIsEmpty(SeqStack * s) //判断栈是否为空
{
if (s->top == -1)
return 1;
else
return 0;
}
int StackIsFull(SeqStack *s) //判断栈是否为满
{
if (s->top == MAXNUM - 1)
return 1;
else
return 0;
}
void StackPush(SeqStack *s, CAR car) // 进栈
{
if (!StackIsFull(s)) //若栈未满
{
s->top++; //修改栈顶指针
s->car[s->top] = car; //将车辆信息入栈
}
}
CAR StackPop(SeqStack *s) //出栈
{
CAR car;
if (s->top != -1) //栈不为空
{
car = s->car[s->top];
s->top--;
return car;
}
}
CAR StackGetTop(SeqStack * s) //取栈顶元素
{
CAR car;
if (s->top != -1)
{
car = s->car[s->top];
return car;
}

}
//队列链表
typedef struct carnode //定义链队列的节点
{
CAR data;
struct carnode *next;
}CarNodeType;
typedef struct //链队列
{
CarNodeType *head; //头指针
CarNodeType *rear; //尾指针
}CarChainQueue;
void ChainQueueInit(CarChainQueue * q) //初始化链队列接点性质
{
if(!(q->head = (CarNodeType *) malloc(sizeof(CarNodeType))))
{
printf("内存分配失败!\n");
exit(0);
}
q->rear = q->head; //头尾指针相同
q->head->next = NULL; //头尾指针后下一个节点为空
q->rear->next = NULL;
}
void ChainQueueIn(CarChainQueue * q, CAR car) //入队列
{
CarNodeType *p;
if(!(p = (CarNodeType *) malloc(sizeof(CarNodeType))))
{
printf("内存分配失败!\n");
exit(0);
}
p->data = car;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
CAR ChainQueueOut(CarChainQueue * q) //出队列
{
CarNodeType *p;
CAR car;
if (q->head != q->rear)
{
p = q->head->next;
if (p->next == NULL)
{
car = p->data;
q->rear = q->head;
free(p);
} else
{
q->head->next = p->next;
car = p->data;
free(p);
}
return car;
}

}
int ChainQueueIsEmpty(CarChainQueue * q) //判断链队列是否为空
{
if (q->rear == q->head) //若队首等于列尾
return 1; //返回空
else
return 0; //返回非空

}
void separator(int n,char ch,char newline) //输出多个字符
{
int i;
for(i=0;i<n;i++)
printf("%c",ch);
if(newline==1)
printf("\n");
}
void PrintDate(struct tm gm_date)
{
printf("%d/%d %02d:%02d:%02d\n", gm_date.tm_mon,gm_date.tm_mday,gm_date.tm_hour+8, gm_date.tm_min, gm_date.tm_sec);
}
void ShowPark(SeqStack *s) //查看车位状态
{
int i;
struct tm gm_date;
printf("\n车位使用情况\n");
separator(40,'_',1);
if (StackIsEmpty(s)) //若栈是空
printf("停车场内已没有车辆!\n");
else
{
printf("位置\t车牌号\t进站时间\n");
for (i = 0; i <= s->top; i++)
{
printf("%d\t", s->car[i].position);
printf("%s\t", s->car[i].num);
PrintDate(s->car[i].intime); //输出日期
}
printf("\t\t\t共%d辆", s->top + 1);
if (s->top == MAXNUM - 1)
printf("(已满)\n");
else
printf("(还可停放放%d辆)\n", MAXNUM - 1 - s->top);
printf("\n");
}
separator(40,'_',1);
}
void ShowAisle(CarChainQueue * q)//显示过道上车辆的情况
{
if (!ChainQueueIsEmpty(q)) //若队列不为空
{
CarNodeType *p;
p = q->head->next; //队列中的第1辆车
printf("\n\n过道使用情况\n");
separator(30,'_',1);
printf("车牌\t进入时间\n");
while (p!= NULL) //队列不为空
{
printf("%s\t", p->data.num);
PrintDate(p->data.intime);; //显示该辆车的信息
p = p->next; //下一辆
}
} else
printf("\n过道上没有车在等待\n");
separator(30,'_',1);
printf("\n\n");
}
void ShowAll(SeqStack *s, CarChainQueue *q) //查看车位和过道使用情况
{
ShowPark(s); //显示车位使用情况
ShowAisle(q); //显示过道使用情况
}
void InPark(SeqStack * s, CarChainQueue * q) //车辆进入停车场
{
CAR car;
struct tm *gm_date;
time_t seconds;
time(&seconds);
gm_date = gmtime(&seconds);;

printf("\n车牌号:");
scanf("%s",&car.num);
car.intime=*gm_date; //进入停车场的时间

if (!StackIsFull(s) && ChainQueueIsEmpty(q)) //如果车位未占完,且过道上没有车
{
car.position = (s->top) + 2; //车位号
StackPush(s, car); //车辆直接进入车位
ShowPark(s); //输出现在停车场的情况
}
else if (StackIsFull(s) || !ChainQueueIsEmpty(q)) //如果车位已满,过道上还有车,则必须放在过道上
{
printf("提示:车位满,只有先停放在过道中。\n");
car.position = MAXNUM;
ChainQueueIn(q, car); //停放在过道

ShowPark(s); //显示车位的情况
ShowAisle(q); //输出过道上的情况
}
}
void PrintRate(CAR *car) //离开时输出费用等情况
{
printf("\n\n 账单\n" );
separator(30,'_',1);
printf("车牌:%s\n", car->num);
printf("停车位置:%d\n", car->position);
printf("进入时间:");
PrintDate(car->intime);
printf("离开时间:");
PrintDate(car->outtime);
printf("停车时间(秒):%d\n", car->length);
printf("费用(元):%d\n", car->expense);
separator(30,'_',1);
printf("\n\n");
}
void OutPark(SeqStack *s, CarChainQueue *q) //车出站出当时过道上的情况放在过道上直接进入车站
{
struct tm *gm_date;
time_t seconds;

SeqStack p; //申请临时放车的地方
StackInit(&p);
char nowtime[10];
int i, pos;
CAR car;

if (StackIsEmpty(s)) //如果车位中没有车辆停放
{
printf("所有车位都为空,没有车辆需要离开!\n");
}
else
{
printf("现在车位使用情况是:\n");
ShowPark(s); //输出车位使用情况
printf("哪个车位的车辆要离开:");
scanf("%d", &pos);
if (pos > 0 && pos <= s->top + 1) //输入车位号正确
{
for (i = s->top + 1; i > pos; i--) //在将pos车位之后停的车放入临时栈,以使pos车位的车出来
{
car = StackPop(s); //出栈
car.position = car.position - 1;//修改车位号
StackPush(&p, car); //将车辆放入临时栈
}
car = StackPop(s); //将位于pos车位的车辆出栈
time(&seconds);
gm_date = gmtime(&seconds); //获取当前时间
car.outtime=*gm_date;//离开时间
car.length=mktime(&car.outtime)-mktime(&car.intime); //停车场中停放时间
car.expense=(car.length/3600+1)*PRICE; //费用
PrintRate(&car); //输出车出站时的情况---进入时间,出站时间,原来位置,花的费用等
while (!StackIsEmpty(&p)) //将临时栈中的车重新进入车位
{
car = StackPop(&p); //从临时栈中取出一辆车
StackPush(s, car); //将车进入车位
}
while(!StackIsFull(s) && !ChainQueueIsEmpty(q)) //如果车位未满, 且过道上还有车
{
car = ChainQueueOut(q); //将最先停在过道中的车辆进入车位
time(&seconds);
gm_date = gmtime(&seconds); //获取当前时间
car.intime = *gm_date;//保存进入车位的时间
StackPush(s, car); //将车辆进入车位
}
}
else //车位号输入错误
{
printf("车位号输入错误,或该车位没有车辆!\n");
}
}
}
int main()
{
SeqStack Park; //停车场栈
CarChainQueue Aisle; //过道链表
StackInit(&Park);
ChainQueueInit(&Aisle);
char choice;
do{
printf("\n\n");
separator(10,' ',0);
printf("停车场管理\n");
separator(30,'_',1);
printf("1.车辆进入\n");
printf("2.车辆离开\n");
printf("3.查看停车场情况\n");
printf("0.退出系统\n");
separator(56,'_',1);
printf("提示:本停车场有%d个车位,车位停满后的车辆将停放在过道上。\n",MAXNUM);
printf("本停车场时计费,收费标准:%.2f元/小时,过道上不收费。\n\n",PRICE);
printf("\n选择操作(0~3):");
fflush(stdin);
choice=getchar();
switch (choice)
{
case '1': //车辆进入
InPark(&Park,&Aisle);
break;
case '2': //车辆离开
OutPark(&Park,&Aisle);
break;
case '3':
ShowAll(&Park,&Aisle);
break;
}
}while(choice!='0');
return 0;
}

⑵ 大学Java数据结构期末课程设计

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
import java.util.Stack;
public class DoctorMain implements Runnable
{
private static Deque<Integer> binRenDeque;
private boolean onWork = false;
private boolean isDoctor = true;
public static Integer binRenNumber = 0;
public DoctorMain()
{
System.out.println("开始上班");
binRenDeque = new ArrayDeque<Integer>();
}
/**
* <br/>
* <方法概述> <br/>
* <方法详细概述> <br/>
* <版本> <br/>
* <作者> *
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
DoctorMain doctor=new DoctorMain();
doctor.setDoctor(true);
//上班了
doctor.setOnWork(true);
Thread th1=new Thread(doctor);

DoctorMain binRen=new DoctorMain();
binRen.setDoctor(false);

binRen.setOnWork(true);

Thread th2=new Thread(binRen);

th1.start();
th2.start();

try
{

Thread.sleep(60000);
doctor.setOnWork(false);
binRen.setOnWork(false);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run()
{
while (onWork)
{

try
{
//是医生还是病人
if (isDoctor)
{
// 医生给病人看病时间
Thread.sleep(2000);
if (!binRenDeque.isEmpty())
{
Integer number = binRenDeque.pollLast();
System.out.println("医生正在给" + number + "号病人看病");
}
}
else
{
//病人来的间隔时间
Thread.sleep((int)(Math.random()*3000));
binRenNumber++;
System.out.println("来了一个病人,号码是:"+binRenNumber);
binRenDeque.push(binRenNumber);
}
//列出所有等待的病人
for(Integer bn:binRenDeque)
{
System.out.println(bn+"号的病人在排队");
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}
System.out.println("医生下班了");
}
public static Deque<Integer> getBinRenStack()
{
return binRenDeque;
}
public static void setBinRenStack(Deque<Integer> binRenStack)
{
DoctorMain.binRenDeque = binRenStack;
}
public boolean isOnWork()
{
return onWork;
}
public void setOnWork(boolean onWork)
{
this.onWork = onWork;
}
public boolean isDoctor()
{
return isDoctor;
}
public void setDoctor(boolean isDoctor)
{
this.isDoctor = isDoctor;
}
public static Integer getBinRenNumber()
{
return binRenNumber;
}
public static void setBinRenNumber(Integer binRenNumber)
{
DoctorMain.binRenNumber = binRenNumber;
}
}

⑶ 数据结构课程设计是什么

.需求分析
1.运行环境
硬件:计算机486/64M以上
操作系统: WIN9x 以上/WIN2000/WIN XP/WIN ME
相关软件:vistualC++
2.程序所实现的功能:
(1)建立并显示图的邻接表。
(2)深度优先遍历,显示遍历结果。
(3)对该图进行拓扑排序,显示排序结果。
(4)给出某一确定顶点到所有其它顶点的最短路径。
3.程序的输入,包含输入的数据格式和说明
(1)输入顶点数,及各顶点信息(数据格式为整形)
(2)输入边数,及权值(数据格式为整形)
4.程序的输出,程序输出的形式
(1)输出图的邻接表、深度优先遍历结果、拓扑排序结果。
(2)输入某一确定顶点到其它所有顶点的最短路径。
5.测试数据
二、设计说明
1、 算法设计的思想
建立图类,建立相关成员函数。最后在主函数中实现。具体成员函数的实现请参看源程序。
2、 主要的数据结构设计说明
图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。
3、 程序的主要模板template <class Type> class Graph
4、 程序的主要函数
Graph、link()、DFTraverse()、TopologicalOrder()、
TopologicalOrder()、GetVertexPos()、ShortestPath
三、上机结果及体会
1、 实际完成的情况说明
主要程序参考教材《数据结构——C++版》。
2、 程序的性能分析
可连续建图
3、 上机过程中出现的问题及其解决方案。
编译没有错误,但结果有问题。解决方案:虽然程序的编译通过,只能说明语法上没有问题,结果只所以不正确是因为算法上原因。
4、 程序中可以改进的地方说明
程序中的深度优先遍历,浪费空间较大,可以考虑用循环来做。但这样将付出代码长度度加长的代价。
5、 程序中可以扩充的功能及设计实现假想
实现假想:随用户的输入可以随时动态的显示图的生成。
6、 收获及体会
编写程序即是一件艰苦的工作,又是一件愉快的事情。最大的收获:编程时如果遇到看似简单但又无法解决的问题,很容易灰心丧气。此时切不可烦躁,一定要冷静的思考,认真的分析。要勇敢的面对问题,勇敢的接受问题,勇敢的处理问题,最后最勇敢的解决问题。
四、参考文献
数据结构(C++版) 叶核亚 主编 机械工业出版社
数据结构经典算法实现与习题解答 汪杰 编著 人民邮电出版社
数据结构课程设计 苏仕华 编著 机械工业出版社
数据结构程序设计题典 李春葆 编著 清华大学出版社
数据结构课程与题解(用C/C++描述) 胡圣荣 编著 北京大学出版社

[程序运行流程图]

char op //程序控制变量

⑷ 数据结构课程设计的内容简介

《数据结构课程设计》列举了数据结构课程设计实例,通过综合训练,能够培养学生实际分析问题、解决问题、编程和动手操作等多方面的能力,最终目的是帮助学生系统地掌握该门课程的基本内容,并运用所学的数据结构知识去解决实际问题。全书共8章,内容包括数据库课程设计概述、线性表、栈、队列、串、多维数组和广义表、树状结构、图状结构等问题的应用。
《数据结构课程设计》是一本独立于具体的数据结构教材的课程设计辅导书,通过针对每种数据结构的具体实例,循序渐进地启发学生完成设计。书中给出的实例都是完整可运行的,同时给出了测试样例、总结与思考等,是一本很好的教学辅导参考书。
《数据结构课程设计》可作为高等院校计算机专业及相关专业教材或参考书,也可供从事软件开发工作和计算机编程爱好者参考。

⑸ 数据结构课程设计

10.哈夫曼编\译码器我有啊
# define max 50
> struct a
> {
> int weight;
> int parent,lchild,rchild;
> };
> struct b
> {
> char cd[max];
> int start;
> };
> main()
> {
> struct a ht[2*max];
> struct b hcd[max],d;
> int i,j,k,n,c,s1,s2,m1,m2,f;
> printf("shu ru n:
");
> scanf("%d",&n);
> for(i=1;i<=n;i++)
> {
> printf("shu ru quan :");
> scanf("%d",&ht[i].weight);
> ht[i].parent=0;
> }
> for(;i<=2*n-1;i++)
> ht[i].parent=ht[i].lchild=ht[i].rchild=0;
> for(i=n+1;i<=2*n-1;i++)
> {
> m1=m2=30000;
> s1=s2=0;
> for(k=1;k<=i-1;k++)
> {
> if(ht[k].parent==0 && ht[k].weight<m1)
> {
> m2=m1;
> s2=s1;
> m1=ht[k].weight;
> s1=k;
> }
> else if(ht[k].parent==0 && ht[k].weight<m2)
> {
> m2=ht[k].weight;
> s2=k;
> }
> }
> ht[s1].parent=ht[s2].parent=i;
> ht[i].lchild=s1;
> ht[i].rchild=s2;
> ht[i].weight=ht[s1].weight+ht[s2].weight;
> }
> for(i=1;i<=n;i++)
> {
> d.start=n-1;
> c=i;
> f=ht[i].parent;
> while(f)
> {
> if(ht[f].lchild==c)d.cd[--d.start]='0';
> else d.cd[--d.start]='1';
> c=f;
> f=ht[f].parent;
> }
> hcd[i]=d;
> }
> printf("shu chu ha fu bian ma
");
> for(i=1;i<=n;i++)
> {
> printf("%d ",ht[i].weight);
> for(k=hcd[i].start;k<n-1;k++)
> printf("%c",hcd[i].cd[k]);
> printf("
");
> }
> }
>
>

⑹ 数据结构课程设计

《数据结构课程设计》列举了数据结构课程设计实例,通过综合训练,能够培养学生实际分析问题、解决问题、编程和动手操作等多方面的能力,最终目的是帮助学生系统地掌握该门课程的基本内容,并运用所学的数据结构知识去解决实际问题。全书共8章,内容包括数据库课程设计概述、线性表、栈、队列、串、多维数组和广义表、树状结构、图状结构等问题的应用。
《数据结构课程设计》是一本独立于具体的数据结构教材的课程设计辅导书,通过针对每种数据结构的具体实例,循序渐进地启发学生完成设计。书中给出的实例都是完整可运行的,同时给出了测试样例、总结与思考等,是一本很好的教学辅导参考书。
《数据结构课程设计》可作为高等院校计算机专业及相关专业教材或参考书,也可供从事软件开发工作和计算机编程爱好者参考。

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919