#ifndef _SQQUEUE_H
#define _SQQUEUE_H
#define N 1024
typedef char squeue_data_t;
typedef struct sqqueue{
squeue_data_t buf[N];
int tail;
int head;
}sqq_node,*sqq_pnode;
//创建
sqq_pnode create_sqqueue();
//判空
int empty_sqqueue(sqq_pnode Q);
//判满
int full_sqqueue(sqq_pnode Q);
//打印
int show_sqqueue(sqq_pnode Q);
//出队
squeue_data_t d_sqqueue(sqq_pnode Q);
//入队
int e_sqqueue(sqq_pnode Q, squeue_data_t data);
#endif
#include "sqqueue.h"
#include
#include
//创建
sqq_pnode create_sqqueue()
{
sqq_pnode Q = (sqq_pnode)malloc(sizeof(sqq_node));
if(NULL == Q)
{
printf("malloc is default\n");
return NULL;
}
Q->tail = Q->head = 0;
return Q;
}
//判空
int empty_sqqueue(sqq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
if(Q->tail == Q->head)
return 0;
else
return -1;
}
//判满
int full_sqqueue(sqq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
if((Q->tail+1)%N == Q->head)
return 0;
else
return -1;
}
//打印
int show_sqqueue(sqq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
//判空
if(0 == empty_sqqueue(Q))
{
printf("Q is empty\n");
return -1;
}
int i;
for(i = Q->head; i != Q->tail; i = (i+1)%N)
{
printf("buf[%d]=%c ", i, Q->buf[i]);
}
}
//出队
squeue_data_t d_sqqueue(sqq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
//判空
if(0 == empty_sqqueue(Q))
{
printf("Q is empty\n");
return -1;
}
squeue_data_t data = Q->buf[Q->head];
Q->head = (Q->head+1)%N;
return data;
}
//入队
int e_sqqueue(sqq_pnode Q, squeue_data_t data)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
//判满
if(0 == full_sqqueue(Q))
{
printf("Q is full\n");
return -1;
}
Q->buf[Q->tail] = data;
Q->tail = (Q->tail+1)%N;
return 0;
}
#include "sqqueue.h"
#include
int main()
{
sqq_pnode Q = create_sqqueue();
int i;
for(i = 0; i < 7; i++)
{
e_sqqueue(Q,i+48);
}
show_sqqueue(Q);
for(i = 0; i < 7; i++)
{
printf("data=%c\n", d_sqqueue(Q));
}
}