0
点赞
收藏
分享

微信扫一扫

顺序队列的基本操作

//顺序队列 
#include <stdio.h>
#include <stdlib.h>

#define MAXQSIZE 100 //队列的最大长度

#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1

typedef struct elem {
int n;
}elem;

typedef struct {
elem* base; // 数据元素
int front; //头指针
int rear; //尾指针
}SqQueue;

//初始化顺序队列
int InitQueue(SqQueue &Q) {
Q.base =(elem*) malloc(sizeof(elem)*MAXQSIZE);
if (Q.base == NULL) return ERROR;
Q.front = 0;
Q.rear = 0;
return OK;
}

//求顺序队列长度
int LengthQueue(SqQueue &Q) {
return Q.front <= Q.rear ? Q.rear - Q.front : MAXQSIZE - (Q.front - Q.rear);//或写成(Q.front-Q.rear+MAXQSIZE)%MAXQSIZE
}

//判断队列是否为空
int EmptyQueue(SqQueue &Q) {
if (Q.front == Q.rear) return TRUE;
return FALSE;
}

//添加一个元素
int AddQueue(SqQueue &Q, elem e) {
if (Q.base == NULL || (Q.rear+1)%MAXQSIZE==Q.front) return ERROR; //空出一个元素的位置以判断栈的空间
*(Q.base + Q.front) = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}

//删除一个元素
int DeleteQueue(SqQueue &Q, elem* e) {
if (Q.front == Q.rear || Q.base == NULL) return ERROR;
*e = *(Q.base + Q.rear);
Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}

//取队头元素
int GetHead(SqQueue &Q, elem* e) {
if (Q.base == NULL || Q.front == Q.rear) return ERROR;
*e = *(Q.base + Q.front);
return OK;
}

int main()
{
return 0;
}
举报

相关推荐

0 条评论