赞
踩
- typedef struct Queue //定义结构体
- {
- int data[MAXSIZE];//表示结构体的长度
- int front;//队列头
- int rear;//队列尾
- }Queue;
- Queue *initQueue()
- {
- Queue *Q = (Queue *)malloc(sizeof(Queue));//申请空间
- Q->front = 0;//新的队列初试没有元素,因此队头和队尾都是0
- Q->rear = 0;
- return Q;
- }
- int isFULL(Queue *Q)
- {
- if((Q->rear+1)%MAXSIZE==Q->front)//为了和空队进行区别
- return 1;
- else
- return 0;
- }
- int enQueue(Queue *Q,int data)
- {
- if(isFULL(Q))//先判断队列是否为满
- return 0;
- else
- {
- Q->data[Q->rear] = data;//将元素写入data数组中,具体写在那里看队尾
- Q->rear = (Q->rear+1)%MAXSIZE;//除以MAXSIZE是防止溢出
- return 1;
- }
- }
- int isEmpty(Queue *Q)
- {
- if(Q->front==Q->rear)//与上面的判满做区别
- return 0;
- else
- return 1;
- }
- int deQueue(Queue *Q)
- {
- if(isEmpty(Q))//队列不空
- {
- int data = Q->data[Q->front];//将要出队的元素暂存到data中,最后返回
- Q->front = (Q->front+1)%MAXSIZE;//出队要看队头,出队后队头向后移,为防止溢出除以MAXSIZE
- return data;
- }
- else
- return -1;
- }
- void printQueue(Queue *Q)
- {
- int i;
- int length = (Q->rear-Q->front+MAXSIZE)%MAXSIZE;//首先要求队列中元素的个数
- int index = Q->front;//定义一个变量表示需要打印的元素的位置(会移动)
- for(i=0;i<length;i++)//循环输出
- {
- printf("%d ",Q->data[index]);
- index = (index+1)%MAXSIZE;//除以MAXSIZE防止溢出
- }
- printf("\n");
- }
- int main()
- {
- Queue *Q = initQueue();//初始化队列
- int i,data;
- for(i=0;i<5;i++)
- enQueue(Q,i);//验证入队
- printQueue(Q);//验证遍历输出
- data = deQueue(Q);//验证出队
- printQueue(Q);
- printf("%d\n",data);
- return 0;
- }
----------------------------完整代码如下-------------------------------
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5 //定义循环队列的长度为5
typedef struct Queue //定义结构体
{
int data[MAXSIZE];//表示结构体的长度
int front;//队列头
int rear;//队列尾
}Queue;
/*初始化队列*/
Queue *initQueue()
{
Queue *Q = (Queue *)malloc(sizeof(Queue));//申请空间
Q->front = 0;//新的队列初试没有元素,因此队头和队尾都是0
Q->rear = 0;
return Q;
}
/*判满*/
int isFULL(Queue *Q)
{
if((Q->rear+1)%MAXSIZE==Q->front)//为了和空队进行区别
return 1;
else
return 0;
}
/*入队*/
int enQueue(Queue *Q,int data)
{
if(isFULL(Q))//先判断队列是否为满
return 0;
else
{
Q->data[Q->rear] = data;//将元素写入data数组中,具体写在那里看队尾
Q->rear = (Q->rear+1)%MAXSIZE;//除以MAXSIZE是防止溢出
return 1;
}
}
/*判空*/
int isEmpty(Queue *Q)
{
if(Q->front==Q->rear)//与上面的判满做区别
return 0;
else
return 1;
}
/*出队*/
int deQueue(Queue *Q)
{
if(isEmpty(Q))//队列不空
{
int data = Q->data[Q->front];//将要出队的元素暂存到data中,最后返回
Q->front = (Q->front+1)%MAXSIZE;//出队要看队头,出队后队头向后移,为防止溢出除以MAXSIZE
return data;
}
else
return -1;
}
/*遍历输出*/
void printQueue(Queue *Q)
{
int i;
int length = (Q->rear-Q->front+MAXSIZE)%MAXSIZE;//首先要求队列中元素的个数
int index = Q->front;//定义一个变量表示需要打印的元素的位置(会移动)
for(i=0;i<length;i++)//循环输出
{
printf("%d ",Q->data[index]);
index = (index+1)%MAXSIZE;//除以MAXSIZE防止溢出
}
printf("\n");
}
int main()
{
Queue *Q = initQueue();//初始化队列
int i,data;
for(i=0;i<5;i++)
enQueue(Q,i);//验证入队
printQueue(Q);//验证遍历输出
data = deQueue(Q);//验证出队
printQueue(Q);
printf("%d\n",data);
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。