采用顺序存储队列
define TRUE 1
define FALSE 0
define OK 1
define ERROR 0
define OVERFLOW -1
typedef int Status;
类型定义
typedef struct {
ElemType *elem; //存储空间的基址
int front; //队头位标
int rear; //队尾位标,指示队尾元素的下一位置
int maxSize; //最大长度
}
//初始化操作
Status InitQueue_Sq(SqQueue &Q, int size) {
Q.elem = (ElemType*)malloc(size*sizeof(ElemType));
if(NULL == Q,elem)
return OVERFLOW;
Q.maxSize = size;
Q.front = Q.rear = 0; //置Q为空队列
return OK;
}
//出队操作
Status DeQueue_Sq(SqQueue &Q, ElemType &e) {
//若队列不为空,则删除队列Q中的头元素,用e返回其值
if(Q.front == Q.rear)
return ERROR;
e = Q.elem[Q.front];
Q.front = (Q.front + 1) % Q.maxSize;
return OK;
)
//入队操作
Status EnQueue_Sq(SqQueue &Q, ElemType e) {
//若当前队列不满,在队尾元素之后,插入元素e为新的队尾元素
if((Q.rear + 1) % Q.maxSize = Q.front)
return ERROR;
Q.elem[Q.rear] = e;
Q.rear = (Q.rear + 1) % Q.maxSize;
return OK;
}
//求队列长度
int QueueLength_Sq(SqQueue Q) {
int s;
s = Q.rear - Q.front;
if(s<0) s = Q.maxSize - Q.front + Q.rear;
return s;
}
//队列判空
Status QueueEmpty_Sq(SqQueue Q) {
//队列为空时,返回TRUE,否则返回FALSE
if(Q.front == Q.rear)
return TRUE;
return FALSE;
}
//取队头元素
Status GetHead_Sq(SqQueue Q, ElemType &e) {
//若队列不空,则用e返回Q的队列头元素,返回OK;否则返回ERROR
if (!QueueEmpty_Sq(Q))
{
e = Q.elem[Q.front];
return OK;
}
return ERROR;
}
//清空队列
void ClearQueue_Sq(SqQueue &Q) {
//将Q置为空
Q.front = Q.rear = 0;
}
//销毁队列
Status DestroyQueue_Sq(SqQueue &Q) {
//销毁队列没,释放结点
if (Q.elem != NULL)
{
free(Q.elem);
Q.elem = NULL;
Q.front = Q.rear = 0;
}
}
//遍历队列
void TraverseQueue(SqQueue Q)
{
if (!QueueEmpty_Sq(Q))
{
int i = Q.front;
while (i != Q.rear)
{
printf("%d ", Q.elem[i]);
i = (i+1) % maxSize;
}
printf("\n");
}
}