数据结构导论-实践设计报告-1

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

实践考核题第一题设计报告书

队列是有限个同类型数据元素的线性序列,是一种先进先出(First In First Out)的新型表,新加入的数据元素插在队列的尾端,出队列的数据元素在队列首部被删除。

顺序存储实现的队列称为顺序队列,它由一个一维数组(用于存储队列中元素)及两个分别指示队列首和队列尾元素的变量组成,这两个变量分别称为“队列首指针”和“队列尾指针”。

(1)、队列是有限的数据元素的集合,要定义一个常量说明该队列的大小;

(2)、定义顺序队列的类型包括一个数据域和两个指针域(首指针和尾指针),并声明一个该类型的变量以便于操作;

(3)、根据需求分析写出每个函数的功能:

置空函数:根据函数的形参,即传递进来的队列指针,调用它的首指针和尾指针让两个指针相等,就把队列中的元素全部清空。

入队函数:首先判断该队列是否已满,如果队列已满,就退出操作。否则,执行入队操作的语句,由于是循环队列所以在移动尾指针时,要把尾指针的位置取余运算(queue.rear=(queue.rear+1)%maxsize;),然后把数据元素赋给尾指针(queue,data[queue.rear]=x;)。

出队函数:当有数据元素要出队时,首先判断该队列是否为空,如果为空时,元素出队列失败。否则,当队列不为空时,执行出队操作(queue.front=(queue.front+1)%maxsize;)返回数值1,说明出队成功。判空函数:该函数是用来判断队列是否为空的,是被别的函数调用作为判断条件用,若果为空的话就返回数值0,标志不能继续执行下面的语句。判断为空的条件是:queue.rear==queue.front;如果为空返回值为1,否则返回值为0。

详细设计

对于队列的操作首先需要把队列置空,然后插入数据元素,在插入元素时需要判断是否队列已满,在数据元素出队时需要先对队列判断是否为空,如果为空时结束程序继续执行,否则继续执行出队操作。(1)定义结构体

Typedef struct seqqueue //定义结构体类型seqqueue

{

Int data[maxsize]; //结构体中的三个变量第一个为整形数组

Int front,rear; //第二和第三个为整形类型的表示队首的变量和队尾的变量}queue; //对结构体变量定义了一个别名

Queue qe; //定义结构体类型的变量

(2)置空的函数代码:

Void Setnull(queue qe){ //把队列传进函数

qe.front = 0; //把队列的首指针赋值为0

qe.rear = 0; //把队列的尾指针赋值为0,让它和首指针的地址相同

}

(3) 判空函数代码:

Int isempty(queue qe){ //通过参数qe判断队列是否为空

If(qe.rear == qe.front) //判断的条件是判断首指针和尾指针的地址是否相同Return 1; //如果相等返回1

Else

Return 0; //如果不相等返回0

}

(4)入队函数代码:

Int enqueue(queue qe, int x){ //通过参数把x的数值传递给队列qe If((qe.rear+1)%maxsize == qe.front) //判断队列qe是否已满

{

Error(“队列已满”); //若队列已满,则入队列失败

Return 0; //返回值为0

}

Else{ //否则执行else的操作

Qe.rear = (qe.rear+1)%maxsize; //把尾指针地址加1

Return 1; //成功,则返回1

}

}

(5)出队函数代码:

Int dequeue(queue qe){ //通过参数qe把队列中先首指针地址中的数据删除If(isempty(qe)){ //通过调用判空函数判断队列是否为空

Error(“队列为空”); //若为空则弹出队列为空的消息

Return 0; //返回值为0

}

Else{ //不为空

Qe.front = (qe.front + 1)%maxsize; //把首指针的位置前移一个单位,就把原来的数据丢失Return 1; //删除成功则返回值1

}

}

(6)通过编写主函数代码,调用以上这四个函数来实现队列的基本操作

Void main()

{

Int flag; //标志变量,判断是入队还是出队

Int i; //设置普通变量

Queue qe; //定义结构体变量qe

Setnull(qe); //调用置空函数,先把队列置空

While(1)

{

Printf(“请输入标志数值:1表示入队数据,2表示出对数据,0表示本次运行结束\n”); //输入提示判断标志

Scanf(“%d”,&flag); //输入的标志数

Switch(flag) //用switch结构判断是入队还是出队

{

Case 1: //如果flag是1,表示入队,执行下面的操作

Printf(“输入一个整型的数值\n”); //提示输入数据的标志

Scanf(“%d”,&x); //输入数据的函数

If(Enqueue(qe,x)) //根据返回值判断是否输入成功

Printf(“入队成功!\n”);

Break; //跳出本次执行

Case 2: //如果flag是2,则表示出队

If(dequeue(qe)) //根据返回值判断是否出队成功

Printf(“出队成功!\n”);

Break;

Case 0 :

Exit(0);

Default : //如果输入的flag不是1或2,则结束本次调用

Printf(“请输入正确的数值1或2”);

Break;

}

相关文档
最新文档