Queue.h
#ifndef _QUEUE_H__
#define _QUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int T;
typedef struct Queue{
T *m_vect; //存储数据的内存空间
size_t cap; //总容量
size_t index; //队列头的下标位置
size_t size; //目前元素的个数
}Queue;
void init(Queue *que,size_t cap);//初始化
bool isEmpty(Queue *que);//是否为空
bool isFull(Queue *que);//是否已满
size_t getCap(Queue *que);//队列最大长度
size_t getSize(Queue *que);//队列中元素的个数
void push(Queue *que,T data);//队列末尾添加一个元素
T pop(Queue *que);//取出队列首的元素
T peekFront(Queue *que);//查看队列首的元素
T peekTail(Queue *que);//查找队列尾的元素
void travel(Queue *que);//遍历队列中的元素
void clear(Queue *que);//清空队列中所有的元素
void destroy(Queue *que);//销毁
#endif //_QUEUE_H__
Quque.c
#include "queue.h"
/*
typedef int T;
typedef struct Queue{
T *m_vect; //存储数据的内存空间
size_t cap; //总容量
size_t index; //队列头的下标位置
size_t size; //目前元素的个数
}Queue;
*/
void init(Queue *que,size_t cap){
que->m_vect = calloc(cap,sizeof(T));
que->cap = cap;
que->index = 0;
que->size = 0;
}
bool isEmpty(Queue *que){
return que->size == 0;
}
bool isFull(Queue *que){
return que->size == que->cap;
}
size_t getCap(Queue *que){
return que->cap;
}
size_t getSize(Queue *que){
return que->size;
}
void push(Queue *que,T data){
que->m_vect[(que->index+que->size)%que->cap] = data;
++que->size;
}
T pop(Queue *que){
T data = que->m_vect[que->index];
que->index = (que->index+1)%que->cap;
--que->size;
return data;
}
T peekFront(Queue *que){
return que->m_vect[que->index];
}
T peekTail(Queue *que){
return que->m_vect[(que->index+que->size-1)%que->cap];
}
void travel(Queue *que){
for(int i=0;i<que->size;i++){
printf("%d ",que->m_vect[(i+que->index)%que->cap]);
}
printf("\n");
}
void clear(Queue *que){
while(!isEmpty(que)){
pop(que);
}
//que->index = 0;
//que->size = 0;
}
void destroy(Queue *que){
if(que->m_vect != NULL){
free(que->m_vect);
que->m_vect = NULL;
}
}
Test.c
#include "queue.h"
int main(){
Queue que;
init(&que,5);
int i=0;
while(!isFull(&que)){
push(&que,i);
i++;
}
travel(&que);
while(!isEmpty(&que)){
printf("%d ",pop(&que));
}
printf("\n");
push(&que,10);
push(&que,20);
printf("%d ",pop(&que));
push(&que,30);
push(&que,40);
push(&que,50);
push(&que,60);
travel(&que);
printf("%d ",peekFront(&que));
printf("%d \n",peekTail(&que));
destroy(&que);
return 0;
}