1. 头文件
#ifndef __SEQUEUE_H__
#define __SEQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#define MAXQUEUESIZE 10
typedef int dadatype;
typedef struct{
dadatype data[MAXQUEUESIZE];
int front;//队头下标
int rear;//队尾下标
}sequeue;
//初始化
extern sequeue* sequeue_create();
//队列是否为空
extern int sequeue_empty(sequeue *s);
//队列是否为满
extern int sequeue_full(sequeue *s);
//入队
extern int sequeue_push(sequeue *s,int value);
//出队
extern dadatype sequeue_pop(sequeue *s);
//打印
extern void sequeue_show(sequeue *s);
#endif
2. 方法实现
2.1 创建队列
sequeue* sequeue_create(){
sequeue *p;
if((p=(sequeue*)malloc(sizeof(sequeue))) == NULL){
printf("malloc failed\n");
return NULL;
}
p->front = p->rear = 0;
return p;
}
2.2 判空
//判空
int sequeue_empty(sequeue *s){
if(s->front == s->rear){
return 1;
}
return 0;
}
2.3 判满
//判满,牺牲一个空间,队头指向队尾的下一个位置就为满
int sequeue_full(sequeue *s){
if((s->rear+1)%MAXSIZE == s->front){
return 1;
}
return 0;
}
2.4 入队
//入队
int sequeue_push(sequeue *s,int value){
if(sequeue_full(s)){
printf("the queue is full\n");
return -1;
}
//先插入元素,队尾元素在加1
s->data[s->rear] = value;
s->rear = (s->rear + 1)%MAXSIZE;
return 1;
}
2.5 出队
//出队
int sequeue_pop(sequeue *s){
int p;
if(sequeue_empty(s)){
printf("the queue is empty\n");
return -1;
}
p = s->data[s->front];
s->front = (s->front + 1)% MAXSIZE;
return p;
}
2.6 打印
//打印
void sequeue_show(sequeue *s){
int i;
//因为是循环队列,所以i的条件应该是不等于,而不是小于。
for(i=s->front;i != s->rear;i=(i+1)%MAXSIZE){
printf("%d\t",s->data[i]);
}
printf("\n");
}