/*顺序队列及其实现*/
/******************** 队列(顺序存储)************************/
/* 队列(顺序存储)的头文件 */
/* 文件名:seqqueue.h */
/***********************************************************/
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int front;
int rear;
}sequence_queue;
/******************** 队列(顺序存储)初始化************************/
/* 函数功能:队列(顺序存储)初始化 */
/* 函数参数:指向sequence_queue类型变量的指针变量sq */
/* 函数返回值:空 */
/* 文件名:seqqueue.c,函数名:init() */
/*****************************************************************/
void init(sequence_queue *sq)
{
sq->front=sq->rear=0;
}
/******************** 队列(顺序存储)是否为空************************/
/* 函数功能:判断队列(顺序存储)是否为空 */
/* 函数参数:sequence_queue类型变量sq */
/* 函数返回值:int类型,返回1表示空,0表示非空 */
/* 文件名:seqqueue.c,函数名:empty() */
/*******************************************************************/
int empty(sequence_queue sq)
{
return (sq.front==sq.rear? 1:0);
}
/******************** 打印队列(顺序存储)************************/
/* 函数功能:打印队列(顺序存储)结点值 */
/* 函数参数:sequence_queue类型变量sq */
/* 函数返回值:空 */
/* 文件名:seqqueue.c,函数名:dispaly() */
/***************************************************************/
void display(sequence_queue sq)
{
int i;
if(empty(sq))
{
printf("\n顺序队列是空的!");
}
else
for(i=sq.front;i<sq.rear;i++)
printf("%5d",sq.a[i]);
}
/******************取得队列(顺序存储)队首结点值********************/
/* 函数功能:取得队列(顺序存储)队首结点值 */
/* 函数参数:sequence_queue类型变量sq */
/* 函数返回值:datatype类型,返回队首结点值 */
/* 文件名:seqqueue.c,函数名:get() */
/******************************************************************/
datatype get(sequence_queue sq)
{
if(empty(sq))
{
printf("\n顺序队列是空的! 无法获得队首结点值!");
exit(1);
}
return sq.a[sq.front];
}
/******************队列(顺序存储)的插入(进队)操作********************/
/* 函数功能:队列(顺序存储)的插入(进队)操作 */
/* 函数参数:指向sequence_queue类型变量的指针变量sq
datatype类型的变量x */
/* 函数返回值:空 */
/* 文件名:seqqueue.c,函数名:insert() */
/********************************************************************/
void insert(sequence_queue *sq,datatype x)
{
int i;
if(sq->rear==MAXSIZE)
{
printf("\n顺序队列是满的!");
exit(1);
}
sq->a[sq->rear]=x;
sq->rear++;
}
/******************队列(顺序存储)的删除(出队)操作********************/
/* 函数功能:队列(顺序存储)的删除(出队)操作 */
/* 函数参数:指向sequence_queue类型变量的指针变量sq
datatype类型的变量x */
/* 函数返回值:空 */
/* 文件名:seqqueue.c,函数名:dele() */
/********************************************************************/
void dele(sequence_queue *sq)
{
if(sq->front==sq->rear)
{
printf("\n顺序队列是空的!不能做删除操作!");
exit(1);
}
sq->front++;
}
/*顺序循环队列*/
/******************循环队列(顺序存储)的插入操作**********************/
/* 函数功能:队列(顺序存储)的插入操作 */
/* 函数参数:指向sequence_queue类型变量的指针变量sq
datatype类型的变量x */
/* 函数返回值:空 */
/* 文件名:secqinse.c,函数名:insert_sequence_dqueue() */
/********************************************************************/
void insert_sequence_cqueue(sequence_queue *sq,datatype x)
{
if((sq->rear+1)%MAXSIZE==sq->front)
{
printf("\n顺序循环队列是满的! 无法进行插入操作!");
exit(1);
}
sq->a[sq->rear]=x;
sq->rear=(sq->rear+1)%MAXSIZE;
}
/******************循环队列(顺序存储)的删除操作**********************/
/* 函数功能:队列(顺序存储)的删除操作 */
/* 函数参数:指向sequence_queue类型变量的指针变量sq */
/* 函数返回值:空 */
/* 文件名:secqinse.c,函数名:insert_sequence_dqueue() */
/********************************************************************/
void dele_sequence_cqueue(sequence_queue *sq)
{
if((sq->rear+1)%MAXSIZE==sq->front)
{
printf("\n顺序循环队列是空的! 无法进行插入操作!");
exit(1);
}
sq->front=(sq->front+1)%MAXSIZE;
}