数据结构课程设计 数据结构课程设计

作者&投稿:子车养 (若有异议请与网页底部的电邮联系)
#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;
}

这个在这里哪里找的到,去相关的论坛发发帖子问一下吧


数据结构课设总结~

我正好在做课设,我把我的总结给你。
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。
紧张的两周数据结构实训很快就过去了,通过这两周的实践学习,不仅使我们巩固了以前的知识并在此基础上还对数据结构的特点和算法有了更深的了解,使我们在这门课程的实际应用上也有了一个提高。
首先这两周的学习,使我们在巩固了原有的理论知识上,又培养了灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我们体会到自身知识和能力在实际中的应用和发挥。其次,它激发了我们创新意识,开发创造的能力和培养沟通能力。另外,让我们进一步熟悉了数据结构的设计应用。每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我们数据结构的学习和提高很有益处,并且使我们明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,通过在编译环境中的编译与调试,可到最终的程序。最后,在这次的实训过程中,我们深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。
在两周的实训中,我们也体会到了团队合作的重要性,从最初的查阅资料到最后的程序的成功运行,我们组有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。两个礼拜的时间我们经历了很多,也收获了很多。与其说这次的实训是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。
总之,两个礼拜的课程设计让我们受益匪浅。我们深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功。

#include "stdio.h"typedef int ElemType;/* 链队列结点结构 */typedef struct node{ ElemType data; struct node *next;} LNode;/* 链队列结构 */typedef struct Queue{ LNode *front; LNode *rear;} Queue;Queue *InitQueue(){ Queue *temp; temp = (Queue *)malloc(sizeof(Queue)); temp->front = (LNode *)malloc(sizeof(LNode)); temp->rear = temp->front; return temp;}/* 判断链队列是否为空 */int IsEmpty(Queue *Q){ return (Q->front==Q->rear ? 1 : 0);

数据结构课程设计是什么
答:(2)输入某一确定顶点到其它所有顶点的最短路径。5.测试数据 二、设计说明 1、 算法设计的思想 建立图类,建立相关成员函数。最后在主函数中实现。具体成员函数的实现请参看源程序。2、 主要的数据结构设计说明 图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。3、 程序的...

数据结构课程设计的目的和意义
答:1、目的:通过实践,让学生加深对数据结构知识的理解,提高计算机算法设计能力,锻炼学生的综合能力,掌握程序的实际开发流程,以提高算法解决问题的能力,增强算法设计的自觉性和把握算法实施操作的能力。2、意义:帮助学生更深地理解数据结构的知识内容,使他们能够实践运用和掌握程序开发实际流程,以及分析、...

急!!!数据结构课程设计
答:4、 两种存储结构的转换(5分),如果其中一种存储结构为十字链表或邻接多重表则增加5分。5、 输出图的深度优先遍历序列或广度优先遍历序列(5分)6、 求图的深度优先或广度优先的生成树(或生成森林)(存储结构为孩子-兄弟链表),并对生成树进行遍历(15分)7、 判断图的连通性,输出连通分量的个数(5分)8、 判断图...

数据结构课程设计的需求分析怎么写
答:1、 数据结构 2、 程序模块 3、各模块之间的调用关系以及算法设计 三 详细设计 实现概要设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);写出出函数和过程的调用关系....

数据结构课程设计
答:《数据结构课程设计》是一本独立于具体的数据结构教材的课程设计辅导书,通过针对每种数据结构的具体实例,循序渐进地启发学生完成设计。书中给出的实例都是完整可运行的,同时给出了测试样例、总结与思考等,是一本很好的教学辅导参考书。《数据结构课程设计》可作为高等院校计算机专业及相关专业教材或参考...

c语言 数据结构课程设计 图书管理系统
答:c语言 数据结构课程设计 图书管理系统 【5.1】图书管理系统[问题描述]设计一个图书管理系统,实现图书采编入库、借书、还书、查询等基本业务。[基本要求](1)登记每种书的基本信息,包括书号、书名、作者、现存量和库存量、... 【5.1】图书管理系统[ 问题描述 ]设计一个图书管理系统,实现图书采编入库、借书、还书、...

《数据结构 课程设计》表达式求值 实验报告
答:算术表达式求值演示 一、概述 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是算术表达式求值演示...

数据结构课程设计-客户消费积分管理系统
答:1. 设计目的 数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。2. ...

数据结构的课程设计,C语言版本的,需要完整代码
答:数据结构的课程设计,C语言版本的,需要完整代码5、车厢调度问题问题描述:假设停在铁路调度站(如教科书中图3.1(b)所示)入口处的车厢系列的编号依次为1,2,3,…n。设计一个程序,求出... 数据结构的课程设计,C语言版本的,需要完整代码5、车厢调度问题问题描述:假设停在铁路调度站(如教科书中图3.1(b)所示)入口处...

求数据结构课程设计——制作浏览器插件(要求使用c语言),在线等,急...
答:设计插件的架构:根据插件的功能和目标,设计插件的整体架构,包括插件的入口点、事件处理机制、数据结构等。考虑如何与浏览器进行交互和响应用户操作。实现插件功能:使用C语言编写插件的代码,根据设计的架构,实现插件的具体功能。涉及到的技术可以包括网络通信、HTML解析、数据结构的操作等。测试和调试:对...