循环队列实现入队和出队操作
输入:
3 //队列大小,循环队列起始值为0,会少存储一个值
输出:
1进队!
2进队!
3进队!
队列已满,3 进队不成功!
1 出队
2 出队
代码实现:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 10
typedef int ElemType;
int sizes;
//定义队列
typedef struct
{
ElemType data[MaxSize];
int front, rear;
}SqQueue;
void InitQueue(SqQueue *&q)
{
q = (SqQueue *)malloc(sizeof(SqQueue));
q->front = q->rear = 0;
}
void DestroyQueue(SqQueue *&q)
{
free(q);
}
bool QueueEmpty(SqQueue *q)
{
return (q->front == q->rear);
}
bool enQueue(SqQueue *&q, ElemType e)
{
if((q->rear+1)%sizes == q->front)
{
printf("队列已满,%d进队不成功!\n", e);
return false;
}
q->rear = (q->rear+1)%sizes;
q->data[q->rear] = e;
return true;
}
bool deQueue(SqQueue *&q, ElemType &e)
{
if(q->front == q->rear)
return false;
q->front = (q->front + 1)%sizes;
e = q->data[q->front];
return true;
}
int main()
{
//输入队列大小
scanf("%d", &sizes);
SqQueue *q;
ElemType e;
InitQueue(q);
int i = 0;
while(i < sizes)
{
printf("%d进队!\n", i+1);
enQueue(q, i+1);
i++;
}
while(!QueueEmpty(q))
{
deQueue(q, e);
printf("%d 出队\n", e);
}
printf("\n");
DestroyQueue(q);
return 0;
}
运行结果1:
代码实现2(备用):
#include<iostream>
#include<malloc.h>
using namespace std;
typedef char ElemType;
int g_n = 0;
typedef struct
{
ElemType *data;
int front,rear;
} SqQueue;
void InitQueue(SqQueue *&q)
{
//printf("g_n = %d\n", g_n);
q=(SqQueue *)malloc(sizeof(SqQueue));
q->data= (ElemType *)malloc(g_n*sizeof(ElemType));
q->rear=q->front=0;
}
void DestroyQueue(SqQueue *&q)
{
free(q);
}
bool QueueEmpty(SqQueue *q)
{
return(q->rear==q->front);
}
bool enQueue(SqQueue *&q,ElemType e)
{
if((q->rear+1)%g_n==q->front)//濡傛灉闃熸弧杩斿洖false
return false;
q->rear=(q->rear+1)%g_n;
q->data[q->rear]=e;
return true;
}
bool deQueue(SqQueue *&q,ElemType e) //鍑洪槦
{
if(q->rear==q->front)//闃熺┖
return false;
q->front=(q->front+1)%g_n;
e=q->data[q->front];
return true;
}
int main()
{
ElemType e;
SqQueue *q;
// int n;
scanf("%d",&g_n);
InitQueue(q);
for(int i=1;;i++)
{
printf("%d进队!\n",i);
if(enQueue(q,i))
{
}
else
{
printf("队列已满,%d 进队不成功!\n",i);break;
}
}
for(int i=1;; i++)
{
if(deQueue(q,i))
printf("%d 出队\n",i);
else
return false;
}
DestroyQueue(q);
return 1;
}