代码:
循环队列:首尾相接,front rear1.初始化 front=rear=0 ,表示 空队列
2.当如果插入 ‘a’,front=0,rear=1;
3.当如果插入 ‘b’‘c’‘d’后,front=0,rear=4
4.当 ‘a’ 出队列后,front=1,rear=4
5.当 ‘b’‘c‘ ’d‘出队列后 ,front=4,rear=4
这里说明下:
1. 当 front=rear时,表示 空队列
2. 当 rear+1 % QUEUE_SIZE == front ,表示 满
上面的 在第 3 步,就表示满队列了。。。
front=0,rear=4,队列满时,留了一个元素位置,。
如果不留这个空位置,则必然有 front=rear,就不能判断 是空,还是 满了
所以,我们留了一个 空位置,判断 是否满
初始化:
queue.h- #ifndef _QUEUE_H
-
#define _QUEUE_H
-
-
typedef char ElemType;
-
-
#define QUEUE_SIZE 10
-
typedef struct _queue
-
{ queue.rar
-
ElemType *head; //head 指向队列数据 头
-
int front,rear;
-
}QUEUE;
-
-
QUEUE *init_queue();
-
int in_queue(QUEUE *q,ElemType *e);
-
int out_queue(QUEUE *q,ElemType *e);
-
int get_head(QUEUE *q,ElemType *e);
-
int is_empty(QUEUE *q);
-
-
#endif
queue.c- #include <stdio.h>
-
#include <stdlib.h>
-
#include "queue.h"
-
-
QUEUE *init_queue()
-
{
-
QUEUE *q=NULL;
-
q=(QUEUE *)malloc(sizeof(QUEUE)); //申请 *head front rear 空间
-
if(q==NULL)
-
exit(1);
-
-
q->head=(ElemType *)malloc(sizeof(ElemType)*QUEUE_SIZE);//QUEUE_SIZE=10
-
if(q->head==NULL)
-
{
-
free(q->head);
-
exit(1);
-
}
-
-
q->rear=q->front=0; //0 表示空
-
return q;
-
}
-
/*
-
环形队列首尾相连,当队头 front=QUEUE_SIZE - 1 后,再前进一个位置就自动到0,
-
可以利用除法取余的运算 % 来实现
-
*/
-
/*队列 进
-
队头front进1 : front=(front+1)%QUEUE_SIZE;
-
队尾rear进1 : rear=(rear+1)%QUEUE_SIZE;
-
*/
-
int in_queue(QUEUE *q,ElemType *e)
-
{
-
if((q->rear+1)%QUEUE_SIZE==q->front) //队满
-
return 1;
-
*(q->head+q->rear)=*e; //指针方式 实现
-
//或者 q->head[q->rear]=*e; 数组方式 实现
-
q->rear=(q->rear+1)%QUEUE_SIZE;// 队尾前进 一位
-
-
return 0; //成功返回
-
}
-
-
-
int out_queue(QUEUE *q,ElemType *e)
-
{
-
if(q->rear==q->front)// 队列空
-
return 1; //翻译
-
*e=*(q->head+q->front); //先传值,然后,将 front 加 1,
-
//*e=(q->head[q->front]); //数组 方式 传值;
-
q->front=(q->front+1)%QUEUE_SIZE;
-
-
return 0;
-
}
-
-
//获取 头元素数据
-
int get_head(QUEUE *q,ElemType *e)
-
{
-
if(q->front==q->rear) //队列为空
-
return 1;
-
*e=*(q->head+q->front); //指针方式获取
-
// *e=q->head[q->front]; //数组方式 获取
-
return 0; //成功返回
-
}
-
-
//判断 队列空
-
int is_empty(QUEUE *q)
-
{
-
if(q->rear==q->front)
-
return 0; //为空 ,返回 0
-
else
-
return 1;
-
}
main.c- #include <stdio.h>
-
#include <stdlib.h>
-
#include "queue.h"
-
-
int main()
-
{
-
ElemType ch1='a';
-
ElemType ch2='b';
-
ElemType ch;
-
QUEUE *queue;
-
queue=init_queue();
-
-
printf("in a data\n");
-
in_queue(queue,&ch1);
-
printf("front-data: %c\n",*(queue->head+queue->front));
-
printf("front=%d,rear=%d\n\n",queue->front,queue->rear);
-
-
printf("in a data\n");
-
in_queue(queue,&ch2);
-
printf("front-data: %c\n",*(queue->head+queue->front));
-
printf("front=%d,rear=%d\n\n",queue->front,queue->rear);
-
-
printf("\nout a data\n");
-
out_queue(queue,&ch);
-
printf("the out data is %c:\n",ch);
-
printf("front-data: %c\n",*(queue->head+queue->front));
-
printf("front=%d,rear=%d\n",queue->front,queue->rear);
-
-
return 0;
-
}
显示:- ywx@yuweixian:~/yu/data-struct/book/queue$ ./main
-
in a data
-
front-data: a
-
front=0,rear=1
-
-
in a data
-
front-data: a
-
front=0,rear=2
-
-
-
out a data
-
the out data is a:
-
front-data: b
-
front=1,rear=2
阅读(1177) | 评论(0) | 转发(0) |