#include <iostream>
#include <assert.h>
using namespace std;
/*
struct Node
{
int info;
Node *next;
};
struct queuelk
{
struct Node *front;
struct Node *back;
};
void init_queue(struct queuelk* q)
{
q->back = q->front = NULL;
}
void queue_is_empty(struct queuelk *q)
{
if(q->front==NULL)
{
return;
}
}
void enqueue(struct queuelk *q, int info)
{
struct Node *temp = NULL;
temp = (Node*)malloc(sizeof(Node));
assert(temp!=NULL);
if(q->front == NULL) //这是队列的第一个结点
{
q->front = q->back = temp;
temp->info = info;
return;
}
q->back->next = temp;
temp->info = info;
q->back = temp;
}
bool dequeue(struct queuelk *q, int *info)
{
if(q->front == NULL)
{
return false;
}
*info = q->front->info;
if(q->front == q->back)
{
free(q->front);
q->front = q->back = NULL;
return true;
}
q->front = q->front->next;
return true;
}
*/
//这是个通用队列.
//写一个循环队列.
//
static int arr[100];
static int size = 100;
struct queuelk
{
int rear;
int size;
};
void init_queue(struct queuelk *q)
{
q->front = -1; //这个-1很重要
q->rear = -1;
}
bool enqueue(struct queuelk *q, int info)
{
if(q->front == 0 && q->rear+1 == 100 || q->rear+1 == q->rear)
{
return false;
}
q->rear = (q->rear==100)? 0 : ++q->rear;
if(q->front == -1) //第一个元素.
{
q->front = 0; //追上了才算是队列满.
}
arr[q->rear] = info; //每次在队尾入队,分析一下用什么条件判断队满..什么条件呢
return true;
}
bool dequeue(struct queuelk *q, int *info)
{
if(q->front == -1)
{
return false;
}
*info = arr[q->front];
if(q->front == q->rear)
{
q->front = q->rear =-1; //结束标记在哪种数据结构里都很重要..
}
else
{
q->front = (q->front== 100) ? 0 : ++q->front;
}
return true;
}