原题描述
请给出循环数组实现队列所需的必要数据的定义,并使用循环数组实现队列的六个功能函数。
简要分析
出这个题目,命题人无非是想考查大家都循环数组实现的循环队列的判空、判满等的处理。
数据定义
typedef struct Queue
{
int *data;
int front;
int rear;
int capacity;
}queue;
可AC代码
#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
static int const MAX=256;
static int* data;
typedef struct Queue
{
int *data;
int front;
int rear;
int capacity;
}queue;
queue q;
void ini(){
q.capacity=MAX;
q.data=(int*)malloc(sizeof(int)*(q.capacity+1));
q.front=q.rear=0;
}
int size(){
return (q.rear-q.front+q.capacity) % q.capacity;
}
bool full(){
if((q.rear + 1)%(q.capacity) == q.front)
return true;
return false;
}
bool empty(){
if(q.front==q.rear)
return true;
return false;
}
int front(){
return q.data[q.front];
}
void push(int v){
if(full())
exit(-1);
q.data[q.rear]=v;
q.rear=(q.rear+1) % q.capacity;
}
void pop(){
if(empty())
exit(-1);
q.front=(q.front+1) % q.capacity;
}
int main(){
ini();
push(6);
push(7);
push(8);
printf("队列元素个数为:%d\n",size());
printf("队列队头元素为:%d\n",front());
printf("-------现在出队一个元素-------\n");
pop();
printf("队列元素个数为:%d\n",size());
printf("队列队头元素为:%d\n",front());
}