#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
/*
written on 2018-5-28 14:23:12
this version doesn't have the full functions of queue
can't use it as the right version of the queue
*/
typedef int ElemType;
typedef struct{
ElemType *data;
int front;
int rear;
}CQueue;
void init(CQueue *c){
// 初始化
c->data = malloc(sizeof(ElemType)*MAXSIZE);
if (!c->data) exit(1); // error, not allocation of memory
c->front = 0;
c->rear = 0;
}
int length(CQueue c){
return (c.rear - c.front + MAXSIZE)%MAXSIZE;
}
void enqueue(CQueue *c, ElemType e){
// 入队,这里需要按断是不是队列已经满了,如果满了,则返回Error
if ((c->rear+1)%MAXSIZE == c->front) exit(1); // full then error
c->data[c->rear] = e;
// c->rear ++; // this is the error version
c->rear = (c->rear+1)%MAXSIZE;
}
void dequeue(CQueue *c, ElemType *e){
// 需要判断队列是否为空
if (c->rear == c->front) exit(1); // empty, error
*e = c->data[c->front];
c->front = (c->front+1)%MAXSIZE;
}
void traverse(CQueue c){
while(c.front!=c.rear){
printf("Traverse: %d\n", c.data[c.front++]);
}
}
void main(){
CQueue c;
init(&c);
printf("***********TEST length***********\nsupposed: 0, actual:%d\n",length(c));
enqueue(&c, 1);
printf("***********TEST enqueue***********\nsupposed: 1, actual:\n");
traverse(c);
ElemType e;
dequeue(&c, &e);
printf("***********TEST dequeue***********\nsupposed: 0,1 actual:%d,%d\n", length(c), e);
}
/*
***********TEST length***********
supposed: 0, actual:0
***********TEST enqueue***********
supposed: 1, actual:
Traverse: 1
***********TEST dequeue***********
supposed: 0,1 actual:0,1
*/
C语言实现循环队列,精要版
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 周末在家花了半天时间写了一个简单的双向循环链表,为什么要这样做,一是想比较一下Python原生的list和双向链表...
- 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心...