#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;
}