#ifndef SQUEUE_H
#define SQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef int databyte;
typedef struct Squeue_t
{
databyte data[N];
int head;
int tail;
}squeue_t;
squeue_t* creat_squeue(void);
void push(squeue_t *p, int data);
databyte pop(squeue_t *p);
int count(squeue_t *p);
void show_squeue(squeue_t *p);
void delete_squeue(squeue_t **p);
#endif
#include "squeue.h"
squeue_t* creat_squeue(void)
{
squeue_t *p = (squeue_t *)malloc(sizeof(squeue_t));
if (p == NULL)
{
return NULL;
}
p->head = 0;
p->tail = 0;
return p;
}
int is_empty(squeue_t *p)
{
return p->head == p->tail;
}
int is_full(squeue_t *p)
{
return (p->tail + 1) % N == p->head;
}
void push(squeue_t *p, int data)
{
if(is_full(p))
{
printf("Queue is full\n");
return;
}
p->data[p->tail%N]=data;
p->tail=(p->tail+1)%N;
}
databyte pop(squeue_t *p)
{
databyte tmp;
if(is_empty(p))
{
printf("Queue is empty\n");
return 0;
}
tmp=p->data[p->head%N];
p->head=(p->head+1)%N;//更新头节点
return tmp;
}
void show_squeue(squeue_t *p)
{
int i;
if(is_empty(p))
{
printf("Queue is empty\n");
return;
}
for(i=p->head;i!=p->tail;i=(i+1)%N)
{
printf("%d ",p->data[i%N]);
}
printf("\n");
}
int count(squeue_t *p)
{
return (p->tail - p->head + N) % N;
}
void delete_squeue(squeue_t **p)
{
free(*p);
*p = NULL;
}