循环队列 顺序存储 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;
}
}
#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;
}
}
相关文章推荐
- C++实现循环队列之顺序存储
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 队列顺序循环存储实现
- 数据结构之循环队列(顺序表存储)——C++模板类实现
- 数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .
- 队列的顺序存储实现—循环队列
- 顺序存储实现队列 循环队列 好麻烦
- 循环队列-顺序存储-Java实现
- 循环队列-顺序存储-c语言实现
- 循环队列的顺序存储实现
- 顺序队列(循环队列)基本操作实现 C语言
- C++数据结构之实现循环顺序队列
- C语言实现,顺序队列,循环队列,和栈!
- (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作
- 链栈,顺序栈,单链队列,循环队列,非循环队列的简单实现
- 数据机构(10)--顺序循环队列的实现及相关操作
- Java实现三种(顺序,链式,循环)队列
- 数据结构-队列的顺序存储(循环队列)
- 循环顺序队列c++实现
- 数据结构学习----顺序循环队列(Java实现)