您的位置:首页 > 其它

循环队列 顺序存储 C实现

2013-05-02 18:24 417 查看
转:http://blog.csdn.net/lzf824446/article/details/6725724

#include <stdio.h>
#include <stdlib.h>

#define M 6 //数组长度

#define bool char //c语言中没有bool类型,自己添加的
#define true 1
#define false 0

typedef struct Queue
{
int * pBase;//数组首地址,相当于数组名
int front;
int rear;
}QUEUE;

void init(QUEUE *);//初始化队列
bool en_queue(QUEUE *,int);//入队列
bool out_queue(QUEUE *, int *);//出队列
void traverse_queue(QUEUE *);//遍历队列
bool full_queue(QUEUE *);//判断队列是否为满
bool empty_queue(QUEUE *);//判断队列是否为空

int main (int argc, const char * argv[])
{

QUEUE Q;
int val;
init(&Q);
//测试数据
en_queue(&Q, 1);
en_queue(&Q, 2);
en_queue(&Q, 3);
en_queue(&Q, 4);
en_queue(&Q, 5);
en_queue(&Q, 6);
en_queue(&Q, 7);
en_queue(&Q, 8);

traverse_queue(&Q);

if (out_queue(&Q, &val))
{
printf("出队成功,队列出队元素为:%d\n",val);
}
else
printf("出队失败!");

traverse_queue(&Q);

return 0;
}

void init(QUEUE *pQ)
{//初始化队列
pQ->pBase = (int *)malloc(sizeof(int) * M);
pQ->front = 0;
pQ->rear = 0;
return;
}

bool full_queue(QUEUE * pQ)
{//队列是否为满
if ((pQ->rear + 1) % M == pQ->front) {
return true;
}
else
return false;
}

bool en_queue(QUEUE * pQ,int val)
{//入队列
if (full_queue(pQ)) {
return false;
}
else
{
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear + 1) % M;
return true;
}
}

void traverse_queue(QUEUE * pQ)
{//遍历队列
int i = pQ->front;

while(i != pQ->rear)
{
printf("%d ",pQ->pBase[i]);
i = (i+1) % M;
}
return;
}

bool empty_queue(QUEUE * pQ)
{//队列是否为空
if (pQ->front == pQ->rear) {
return true;
}
else
return false;
}

bool out_queue(QUEUE * pQ, int * pVal)
{//出队列
if (empty_queue(pQ)) {
return false;
}
else
{
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front + 1) % M;
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: