队列管理模拟

 
实验二  队列管理模拟
 

一、实验内容

队列的创建、入队、出队等操作。

二、实验目的

1.熟悉用C或C++进行程序设计的方法。

2.掌握队列的基本操作:创建、入队、出队等运算。

三、实验题目

队列管理的模拟算法采用如下管理模式:(队列采用链式存储结构)

(1)初始化一个空链队列

(2)当从键盘输入奇数时,奇数从队尾入队列;

(3)当从键盘输入偶数时,若队列不空,则队头出队;

(4)当从键盘输入0时,退出算法;

(5)每输入一个整数,显示操作后队列中的所有值。

【测试数据】:

键盘输入整数:1

打印当前队列:    1

键盘输入一个整数:3

打印当前队列:    1    3

键盘输入一个整数:5

打印当前队列:    1    3    5

键盘输入一个整数:7

打印当前队列:    1    3    5    7

键盘输入一个整数:1

打印当前队列:    1    3    5    7    1

键盘输入一个整数:11

打印当前队列:    1    3    5    7    1   11

键盘输入一个整数:2

打印当前队列:    3    5    7    1   11

键盘输入一个整数:4

打印当前队列:    5    7    1   11

键盘输入一个整数:7

打印当前队列:    5    7    1   11    7

键盘输入一个整数:0

打印当前队列:    5    7    1   11    7   (算法结束)

四、实验报告

1.实验题目。

2.程序中使用的数据结构及符号说明。

3.主要算法描述及其流程图。

4.打印一份源程序并附上注释。

5.打印程序运行时的初值和运行结果。

 

#include<stdio.h>

#include<stdlib.h>

typedef int Status;

typedef int QElemType;

#define ERROR 0

#define NULL 0

#define OK 1

typedef struct QNode

{

   QElemType data;

   struct QNode *next;

}QNode,*QueuePtr;

typedef struct

{

    QueuePtr front;

    QueuePtr rear;

}LinkQueue;

Status InitQueue(LinkQueue &Q)//构造一个空队列Q

{

   Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

   if(!Q.front)

      printf(“OVERFLOW”);

   Q.front->next=NULL;

   return OK;

}

Status EnQueue(LinkQueue &Q,QElemType e)//插入元素e为Q的新的队尾元素

{

   QNode *p;

   p=(QueuePtr)malloc(sizeof(QNode));

   if(!p)

      printf(“OVERFLOW”);

   p->data=e;

   p->next=NULL;

   Q.rear->next=p;

   Q.rear=p;

   return OK;

}

Status DeQueue(LinkQueue &Q,QElemType e)//若队列不空,则删除Q的对头元素,用e返回其值,

{

   

   QNode *p;

   if(Q.front==Q.rear)

      return ERROR;

   p=Q.front->next;

   e=p->data;

   Q.front->next=p->next;

   if(Q.rear==p)

      Q.rear=Q.front;

   return OK;

}

Status printQueue(LinkQueue &Q)//输出队列中元素

{

    QNode *p;

   p=Q.front;

    printf(“当前队列:/n”);

   while(p!=Q.rear)

   {

      printf(“%d/t”,p->next->data);

      p=p->next;

   }

   return OK;

}

void main()

{

   int n;

   LinkQueue a;

    InitQueue(a);

   printf(“输入一个整数:/n”);

    scanf(“%d”,&n);

    while(n!=0)

   {

      if(n%2==1)//判断奇偶数

      {

        EnQueue(a,n);

            printQueue(a);

      }

      else

      {

            DeQueue(a,n);

            printQueue(a);

      }

        printf(“/n输入下一个整数:/n”);

        scanf(“%d”,&n);

   }

    printQueue(a);

}

    原文作者:停车场模拟问题
    原文地址: https://blog.csdn.net/michael__lord/article/details/6501545
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞