您的位置:首页 > 理论基础 > 数据结构算法

进击的数据结构之六队列的基本操作-顺序结构

2013-10-31 20:54 513 查看
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status;
typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */

/* 循环队列的顺序存储结构 */
typedef struct
{
QElemType date[MAXSIZE];
int front;    	/* 头指针 */
int rear;		/* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
}SqQueue;

Status InitQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
return 1;
}

Status ClearQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
return 1;
}

Status QueneEmpty(SqQueue Q)
{
if(Q.front==Q.rear)
return 1;
return 0;
}

Status GetHead(SqQueue Q,QElemType &e)
{
if(QueneEmpty(Q))
return 0;
e=Q.date[Q.front];
return 1;
}

Status EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)%MAXSIZE==Q->front)
return 0;
Q->date[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}

Status DeQueue(SqQueue *Q,QElemType &e)
{
if( QueneEmpty(*Q))
return 0;
e=Q->date[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}

int  QueueLength(SqQueue Q)
{
return ((Q.rear-Q.front+MAXSIZE)%MAXSIZE);
}

Status QueueTraverse(SqQueue Q)
{
int i,e;
if (QueneEmpty(Q))
return 0;
while(!QueneEmpty(Q))
{
GetHead(Q,e);
printf("%d\n",e);
Q.front=(Q.front+1)%MAXSIZE;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: