数据结构之循环队列

   简单实现数据结构之循环队列

  

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define OK 1
#define FALSE 0
#define ERROR -1
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
using namespace std;
typedef struct {
  int *base;
  int fron, rear;
  int queueSize;
 }CirQueue;
 int InitCirQueue(CirQueue &Q, int QSize){

    Q.base = (int *)malloc(QSize *sizeof(int));
    if(!Q.base)
          return OVERFLOW;
    Q.queueSize = QSize;
    Q.fron = Q.rear = 0;
        return OK;
 }
 int queueEmpty(CirQueue &Q){
    if(Q.fron == Q.rear)
          return TRUE;
       return FALSE;
 }
 void clearQueue(CirQueue &Q){
       Q.fron = Q.rear = 0;
 }
 int insertQueue(CirQueue &Q, int e)
 {
           if((Q.rear+1)%Q.queueSize == Q.fron)
                    return OVERFLOW;
            Q.base[Q.rear] = e;
            Q.rear =(Q.rear+1)%Q.queueSize;
           return OK;
 }
 int deleteQueue(CirQueue &Q, int &e){
           if(Q.fron == Q.rear)
                    return ERROR;
           e = Q.base[Q.fron];
           Q.fron = (Q.fron+1)%Q.queueSize;
           return OK;
 }
int GetFront(CirQueue &Q, int &e)
 {
   if(Q.fron == Q.rear)
                    return ERROR;
     e = Q.base[Q.fron];
     return OK;
 }
int queueLength(CirQueue &Q)
 {
           return (Q.rear-Q.fron+Q.queueSize)%Q.queueSize;
 }
int main()
{
           CirQueue q;
           int e, N;

          cout << "输入队列规模:"<<endl;
          cin >> N;
         if(!InitCirQueue(q, N))
          cout << "出错" << endl;
            for(int i=0; i<10; i++)
                    if(!insertQueue(q, i+1))
                    cout << "出错" << endl;

           if(!queueEmpty(q))
                    cout << "队列非空"<<endl;

           if(!queueLength(q))
                    cout << "队列长度:0" << endl;
          else
                    cout << "队列长度:" << queueLength(q) << endl;

                    if(!GetFront(q, e))
                              cout << "出错" << endl;
                    else
                              cout << "队首元素:" << e << endl;

             for(int i=0; i<10; i++)
               if(!deleteQueue(q, e))
                    cout << "出错 "<<endl;
             else
                    cout << "出队列:"<< e << endl;

               clearQueue(q);

               if(!queueLength(q))
                    cout << "队列长度:0" << endl;
               else
                    cout << "队列长度:" << queueLength(q) << endl;



             return 0;
}

 

posted @ 2014-10-22 20:23  tt_tt--->  阅读(114)  评论(0编辑  收藏  举报