预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《软件技术基础》实验指导书电子商务教研室2009年9月软件技术基础实验三队列的应用实验目的与基本要求1、掌握队列的顺序存储和链式存储结构。2、掌握队列的特点。3、掌握队列的基本运算。实验条件1、硬件:一台微机2、软件:操作系统和C语言系统实验方法确定存储结构后,上机调试实现队列的基本运算。实验内容1、写出队列的出队和入队算法。2、设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已停放n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让,待路其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一个程序模拟该停车场的管理。性质:必做类型:验证2h队列是从日常排队现象抽象出来的一种数学模型。当然数据结构中的队列远没有生活中的排队灵活。数据结构中的队列规定:数据只能从队尾进,从队首出来。已经进入队列的数据次序不能再做改变。这就叫做“先进先出”(FIFO)或者说“后进后出”(LILO)。允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为队首,通常也用一个队首指针(front)指向队首元素的前一个位置(当然也可以直接指向队首元素,只是许多数据结构的书上都习惯这么定义)。与队列类似,我们可以用一维数组来模拟队列这种数据结构,也可以用链表来模拟。根据以上描述,队列可以可以有以下基本操作:1、创建初始化:按约定置队列为空状态。2、入队列:在队尾加入一个新数据项。3、出队列:从队首取出一个数据项,并使余下诸项向队首移动。4、队列空:判断队列是否为空。5、队列满:判断队列是否已满。从概念上说,队列不存在“满”状态,其长度可以任意增加,但实现(不论静态或-1-软件技术基础动态)中总有空间限制的。下面我就来讨论用数组实现队列结构。假定队列中元素的类型为T,队列的最大长度为queue_size,在任何一刻队列首、尾位置分别用下标head、tail指向。队列初始状态应为:head=0,tail=-1。根据队列定义,head值应恒为0,那么每当出队一个数据项,则必须执行多次移动操作(余下诸项向队首移动)。显然不能直接采用这种结构实现队列。解决这个问题,可以从数学取模运算联想到一个解决办法。比如x=(x+1)mod100,则x的变化范围在[0,99]之间,超过100的又从0,1开始。这不就是我们所需要的嘛!许多书上把它叫作“循环数组”技术。即当入队列时先移动tail(即tail=(tail+1)modqueue_size),出队列时先移动head(即head=(head+1)modqueue_size)。在移动中,若head(或tail)值为queue_size-1,则移动后head(或tail)的值就变成0了,对这种特征就一个是环,只要数组有空间,就可以入队列。用“循环数组”实现队列,必须注意怎样判断队列的空与满的状态。除起始状态外。任何时刻tail所指为最后一个进入队列的元素,而head所指的是刚刚出队列的那个元素原先所占的位置。因此(head+1)modqueue_size才是真正当前队列中首元素位置。采用条件:(tail+1)modqueue_size==head作为“队列满”的判断条件。实际上此时队列中还有一个空位置,这样队列的利用空间比定义的最大空间少一个单元。假如把这个单元也利用上,则就不好判断“满”或“空”了(当head==tail),必须根据是tail追上了head,还是head追上了tail才能区分,这样给处理带来了不便。#include<stdlib.h>#include<stdio.h>#defineNULL0typedefstructnode{intdata;}NODE;#defineLENsizeof(NODE)/*队列的需要变量*/typedefenum{false,true}bool;/*定义bool类型*/unsignedinthead;/*定义队首下标变量*/unsignedinttail;/*定义队尾下标变量*/staticNODE*queue=NULL;/*定义一个队列*/staticunsignedintqueue_size=0;/*队列的大小*//*========================功能:初始化队列的大