APP下载

基于栈和队列的项目课程案例设计

2019-02-07王军

无线互联科技 2019年22期
关键词:模块设计项目课程队列

王军

摘   要:在数据结构的课程教学过程中,学生掌握栈和队列的基本理论和运算并不难,但对于栈和队列知识的运用,就显得不知所措。针对学生的实际情况,通过设计停车管理的项目课程案例,旨在让学生掌握栈和队列的实际使用方式,提高学生学习的兴趣以及学习效率,提升学生的编程能力,激发学生的学习热情,从而提高学生学习效率。文章对此进行了分析。

关键词:栈;队列;模块设计;项目课程

数据结构是与软件设计有关专业的必修课程,主要讲解各种不同数据的逻辑结构和存储结构以及相应的算法和算法效率的分析,是程序设计的核心课程。学生在学习过程中掌握数据结构的核心思想有一定的难度,导致学习时知其然而不知其所以然的情况,给教学带来一定的困惑,因此,在教学过程中,针对学生学习的实际情况设计符合学生要求的项目课程案例,加深学生对教学内容的理解,提高学生的学习兴趣,提升学生的编程能力,从而提高学生的学习效率。徐利梅等[1]提出了新设计的项目课程体系既对原有课程体系不造成重大的颠覆,又能适应新工科建设所提出的培养面向未来工程人才的要求。任晓静[2]和赵海涛等[3]提出了项目课程丰富了课堂教学的理论和实践基础,提升学生的专业能力和职业素养。设计项目课程应用遵循3个原则:需求性原则、认知性原则、兴趣性或实用性原则[4-8]。陈竹云等[9]提到了队列在停车场管理中的应用;冷爽[10]提出了理论与实际有机结合,可以帮助学生快速掌握计算机的基本操作和技能;钟彩[11]提出了改革教学内容、优化计算机课程教学模式、任务分配与驱动、激发学生学习兴趣,从而认识到案例教学的重要性。本文旨在用两个栈和一个循环队列来模拟一个停车管理系统案例,让学生利用栈和队列的基本运算实现项目课程案例设计,实现通过项目课程的案例掌握栈和队列的基本运算的目的。

1    停车管理系统需求分析

1.1  问题的描述

栈S1模拟标准停车位,栈S2模拟倒车位,循环队列Q模拟临时停车位,由这两个栈和一个队列组成一个停车管理系统。要求:

(1)停车时,当标准停车位未满时,车辆必须停在标准停车位中;当标准停车位满时,而临时停时位未满时,车停在临时停车位中;当临时停车位满时,车场中不能在停车。

(2)取车时,如果被取车辆在标准停车位的栈顶,该车辆出栈,同时判断临时停车位是否为空,若不空,将队列中队头车辆取出,停在标准停车位的栈顶并删除队列中的队头车辆。如果被取车辆在标准停车位中且不在栈顶时,将比被取车辆后进栈的车辆逐一停于倒车位中,取出被取车辆后,将倒车位中的车辆按出栈的顺序停于标准停车位中,当临时停车位不空时,将队头车辆停车标准停车位的栈顶,删除队头车辆。如果被取车辆在临时停车位的队头时,取走车辆。如果被取车辆在临时停车位且不在队头时,将比该车辆先进队的车辆依次停于队尾,取起车辆。

1.2  功能模块的分析

(1)设计顺序栈的抽象数据类型。

(2)设计循环队列的抽象数据类型。

(3)设计一个找车函数,返回被取车辆在标准停车位还是在临时停车位。

(4)设计一个停车函数,按上述要求停车。

(5)设计一个取车函数,按上述要求取车。

2    停车管理系统案例总体设计

经过对系统的需求分析,各模块的系统结构示意如图1所示。系统功能设计如下:

(1)顺序栈基本运算主要有判空、判满、进栈、出栈、取栈顶元素等。

(2)循环队列基本运算主要有判空、判满、进队、出队,取队头元素等。

(3)按上述问题描述的要求调用栈或队列的基本运算,实现停车。

(4)去标准停车位或临时停车位查找被取车辆,返回是否找到等信息。

(5)按上述问题描述的要求调用栈或队列的基本运算,实现取车。

3    停车管理系统功能的实现

3.1  各功能模块的实现

3.1.1  数据类型的定义

(1)栈的基本运算的设计:

struct stack

{   int top;

int data[max];

void Init();//栈的初始化

bool IsNull();//判栈空

bool IsFull();//判栈满

bool Push(int x);//进栈

bool Pop(int &x);//出棧

bool GetTopElem(int &x);//取栈顶元素

};

(2)循环队列基本运算的设计:

struct queue

{   int rear,front;

int data[max];

void Init();//初始化

bool IsNull();//判空

bool IsFull();//判满

bool EnterQueue(int x);//进队

bool OutQueue(int &x);//出队

bool GetHeadElem(int &x);//取队头元素

};

(3)停车模块函数模型:bool StopCar(stack &S1,queue &Q,int car)。

(4)找车模块函数模型:int FindCar(Stack &S1, ,queue &Q,int car)。

(5)取车模块函数模型:void GetCar(Stack &S1,stack &S2,queue &Q,int n,int i)。

3.1.2  功能模块的实现

由于实现各功能模块的代码很多,由篇幅有限,这里实现模块(3)(4)(5),代码如下:

停车模块

bool StopCar(Sqstack &S1,Squeue &Q,int car)

{ if(S1.IsFull() && Q.IsFull()) return false;

if(!S1.IsFull()) S1.Push(car);

else Q.EnterQueue(car);

return true;

}

找车模块

int FindCar(Sqstack &S1,Squeue &Q,int car)

{ int i,n; //n=1表示在S1中找到,n=-1表示在Q中找到,n=0表示没有找到

for(i=S1.top;i>=0;i--)

if(data[i]==car) { n=1; return n; }

i=(Q.front+1)%Max;

while((i-1)%Max!=Q.rear)

{   if(data[i]==car) { n=-1;return n;}

i=(i+1)%Max;

}

n=0;

return n;

}

取车模块

void GetCar(Sqstack &S1,Sqstack &S2,Squeue &Q,int n,int car)

{ int x;

if(n==1)

{  while(S1.data[top]!=car)

{  S1.Pop(x); S2.Push(x); }

S1.Pop(x);//取车成功

while(!S2.IsEmpty())

{ S2.Pop(x); S1.Push(x); }

if(!Q.IsEmpty()) {  Q.OutQueue(x); S1.Push(x); }

}

if(n==-1)

{   Q.GetQueueHeadElem(x);

while(x!=car)

{ Q.EnterQueue(x);Q.OutQueue(x);

Q.GetQueueHeadElem(x);

}

Q.OutQueue(x);

}

}

3.2  软件的测试

在程序设计时,用一个整数代表车辆的车牌号,学生在测试时随机输入5位数的整数代表车牌号,分别对停车、找车和取车模块进行测试,完全达到问题描述的要求,测试通过。

4     结语

通过对停车管理系统的设计与实现,主要让学生掌握栈和队列的基本运算以及栈和队列抽象类型设计的重要性和必要性。希望在往后的表达式求值、树结构和图结构的算法中能对栈和队列的基本运算有更加深刻的理解。设计该项目课程希望学生真正理解栈和队列在程序设计中经常遇到,要求学生对栈和队列的基本运算要非常熟练。通过对停车管理系统的实现,学生可以用类似的方法进行其他应用程序的开发与学习,培养学生的学习兴趣,让学生在学习中找到快乐和成就感,这是教育的需求,也是对人才培养的需求。教师可以根据学生的实际设计较为合理的项目课程,不要让学生的学习枯燥乏味,通过各种途径培养学生的学习兴趣,提高学生的学习效率。

[参考文献]

[1]徐利梅,谢晓梅,陈彦,等.新工科专业课程体系重构:从新生项目课程到高峰体验项目课程[J].高等工程教育研究,2019(4):33-39.

[2]任晓静.高职项目课程教学内容设计研究[J].中国校外教育,2019(18):160.

[3]趙海涛,李森萍,吕志刚,等.基于教学过程对接生产过程的施工技术项目课程教学创新与实践[J].高等建筑教育,2019(4):90-98.

[4]赵建中,邓全明.培养创业型人才需彰显人文需求原则[J].淮北职业技术学院学报,2010(1):94-95.

[5]李人晴.浅谈项目课程的教学效果评价体系的构建[J].高教学刊,2019(1):63-65.

[6]魏婧婧.信息设计中的认知原则[J].大众文艺,2016(22):54.

[7]课浩强.C语言程序设计[M].3版.北京:清华大学出版社,2012.

[8]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2012.

[9]陈竹云,叶雯.数据结构中队列的应用研究[J].电脑知识与技术,2017(3):5-7.

[10]冷爽.案例教学在计算机专业中的实践运用[J].佳木斯职业学院学报,2016(1):438.

[11]钟彩.计算机课程案例教学的构建分析[J].课程教育研究,2019(29):253-254.

猜你喜欢

模块设计项目课程队列
队列里的小秘密
在队列里
丰田加速驶入自动驾驶队列
基于小型ERP管理系统
翻转课堂模式对项目化课程实施效果的研究
以职业岗位能力为导向的日语会话课教学改革