数组实现的Circle队列

作者在 2017-04-27 19:19:23 发布以下内容
#include<iostream>
#include<cstdlib>
#define MAX 100 
using namespace std;

typedef struct Queue
{
int Array[MAX];
int Front;
int Rear;
} *CircleQueue; 

CircleQueue Create(void);  //创建一个队列 
int IsEmpty(CircleQueue Q); //是否为空 
int IsFull(CircleQueue Q);  //是否已满 
void EnQueue(CircleQueue Q,int X); //入列 
void DeQueue(CircleQueue Q);      //出列 
void GetQueueFront(CircleQueue Q); //获取队头元素 
void GetQueueRear(CircleQueue Q);  //获得队尾元素 

int main()  //测试 
{
CircleQueue Q=Create();
EnQueue(Q,100);
    DeQueue(Q);
return 0;
}

int IsEmpty(CircleQueue Q)      
{
return (Q->Rear-1)==0;  //Q->Rear-1才是最后一个元素 
}

int IsFull(CircleQueue Q)
{
return (Q->Rear-1-Q->Front)==MAX;  //通过队列个数判断是否为满 
}

void EnQueue(CircleQueue Q,int X)
{
if(IsFull(Q))
   cout <<"队列已满不能插入 " <<endl ; 
else
{
if(IsEmpty(Q))  //空队列情况入队 
{
Q->Array[Q->Front]=X;
Q->Array[Q->Rear]=Q->Array[Q->Front];
Q->Rear=(Q->Rear+1)%MAX;//循环意义下的尾指针加1
}
else          //非空入列 
{
Q->Array[Q->Rear]=X;
Q->Rear=(Q->Rear+1)%MAX;     //循环意义下的尾指针加1
}
cout <<endl <<Q->Array[Q->Rear-1] <<"入队后" <<endl ;
GetQueueFront(Q);
        GetQueueRear(Q);

}

void DeQueue(CircleQueue Q)
{
if(IsEmpty(Q))
   cout <<"队列为空不能出队 " <<endl ;
else     //非空出列 
{
Q->Front=(Q->Front+1)%MAX;     //循环意义下的头指针加1
}
cout <<endl <<"出队后" <<endl ; 
GetQueueFront(Q);
    GetQueueRear(Q);
}

void GetQueueFront(CircleQueue Q)
{
cout <<"队头为" <<Q->Array[Q->Front] <<endl ;

}

void GetQueueRear(CircleQueue Q)
{
cout <<"队尾为" <<Q->Array[Q->Rear-1] <<endl ;   //Q->Rear才是队尾的下标 
}

CircleQueue Create(void)
{
int i,a[8]={8,9,11,7,12,15,14,18};
CircleQueue Q;
Q->Front=Q->Rear=0;
for(i=0;i<8;i++)
{
cout <<a[i] <<' ' ;
}
cout <<endl ;
for(i=0;i<8;i++)
{
if(i==0)      //非空入列 
{
Q->Array[Q->Front]=a[i]; //先给队头赋值 
Q->Array[Q->Rear]=Q->Array[Q->Front];
Q->Rear=(Q->Rear+1)%MAX;       //循环意义下的尾指针加1
}
else    
{
Q->Array[Q->Rear]=a[i];    
Q->Rear=(Q->Rear+1)%MAX;      //循环意义下的尾指针加1
}
}
GetQueueFront(Q);
    GetQueueRear(Q);
return Q;
}
c++基础 | 阅读 1020 次
文章评论,共0条
游客请输入验证码