📄 sqqueue.h
字号:
/* 此文件为实现链式队列的头文件 */
#define OVERFLOW -1
#define ERROR -2
#define OK 1
#define NULL 0
typedef int QStatus ;
typedef char QElemType;
typedef struct QNode{
QElemType data; /* 队列结点数据 */
struct QNode *next; /* 结点链指针 */
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;/* 队头指针 */
QueuePtr rear; /* 队尾指针 */
}SqQueue;
/* 基本操作的函数原型说明 */
/* QStatus InitQueue(SqQueue *Q); 构造一个空队列 */
/* QStatus DestroyQueue(SqQueue *Q); 销毁队列Q,Q不再存在 */
/* QStatus ClearQueue(SqQueue *Q); 将Q清为空队列 */
/* QStatus QueueEmpty(SqQueue *Q);若Q为空队列则返回TRUE,否则返回FALSE */
/* QStatus QueueLength(SqQueue *Q);返回Q的元素个数,即为队列的长度 */
/* QStatus GetHead(SqQueue *Q,QElemType *e); 若队列不为空,用e返回对头元素,并返回OK,否则返回ERROR */
/* QStatus EnQueue(SqQueue *Q,QElemType e); 插入e为新的对尾元素 */
/* QStatus DeQueue(SqQueue *Q,QElemType e);若队列不为空,删除Q的对头元素,用e返回其值并返回OK,否则返回ERROR */
/* QStatus QueueTraverse(SqQueue *Q,visit());从对头到对尾依次对Q中每个元素调用函数visit()一旦visit失败,操作失败 */
/* 基本操作的算法描述 */
QStatus InitQueue(SqQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof( QNode));
if(!Q->front) exit(OVERFLOW); /* 存储分配失败 */
Q->front->next=NULL;
return OK;
}
QStatus DestroyQueue(SqQueue *Q)
{
while(Q->front)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
return OK;
}
QStatus EnQueue(SqQueue *Q,QElemType e)
{
QNode *p;
p=(QueuePtr)malloc(sizeof( QNode));
if(!p) exit(OVERFLOW);/* 存储分配失败 */
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return OK;
}
QStatus DeQueue(SqQueue *Q,QElemType *e)
{
QNode *p;
if(Q->front==Q->rear) return ERROR;
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p) Q->rear=Q->front;
free(p);
return OK;
}
QStatus QueueEmpty(SqQueue *Q)
{
if(Q->front==Q->rear) return OK;
else
return NULL;
}
QStatus GetHead(SqQueue *Q,QElemType *e)
{
if(Q->front==NULL) return ERROR;
else
{
*e=Q->front->data;
return OK;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -