📄 queue.h
字号:
/****************************************queue.h*************************************************/
/*
定义了队列常用操作函数
*/
typedef struct QNode
{
CarInfo data; //数据域
struct QNode *next; //指针域
}QNode, *QueuePtr; //定义链队列结点
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue; //定义链队列头尾指针
//初始化队列
Status InitQueue(LinkQueue* Q);
//销毁队列
Status DestroyQueue(LinkQueue* Q);
//判断队列是否为空,为空返回TRUE,否则返回FALSE
Status QueueEmpty(LinkQueue* Q);
//将数据元素e插入到队列的队尾
Status EnQueue(LinkQueue* Q,CarInfo *e);
//将Q清空为空队列
Status ClearQueue(LinkQueue* Q);
//返回队列Q的元素个数,即为队列长度
int QueueLength(LinkQueue* Q);
//若队列不空,则删除Q的队头元素,用e返回其值,并返回TRUE,否则返回FALSE
Status DeQueue(LinkQueue* Q,CarInfo *e);
//若队列不空,则用e返回Q的队头元素,否则返回FALSE
Status GetTopQueue(LinkQueue* Q,CarInfo *e);
Status InitQueue(LinkQueue* Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(Q->front==NULL)
return FALSE;//申请存储空间失败
Q->front->next=NULL;
return TRUE;
}//InitQueue
//销毁队列Q
Status DestroyQueue(LinkQueue* Q)
{
QueuePtr p;
while(Q->front->next)
{
p=Q->front->next;
Q->front->next=p->next;
free(p);
};
free(Q->front); //释放头结点
return TRUE;
}//DestroyQueue
//判断队列是否为空,为空返回TRUE,否则返回FALSE
Status QueueEmpty(LinkQueue* Q)
{
if(Q->front->next)
return FALSE;
return TRUE;
}//QueueEmpty
//将数据元素e插入到队列的队尾
Status EnQueue(LinkQueue* Q,CarInfo *e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
return FALSE;//申请存储空间失败
p->data=*e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return TRUE;
}//EnQueue
//将Q清空为空队列
Status ClearQueue(LinkQueue* Q)
{
QueuePtr p,q;
p=Q->front->next;
while(p!=Q->rear)
{
if(p==NULL)
{
free(p);
free(q);
return TRUE;
}
q=p;
p=p->next;
free(q);
};
free(p);
Q->rear=Q->front;
Q->front->next=NULL;
return TRUE;
}//ClearQueue
//返回队列Q的元素个数,即为队列长度
int QueueLength(LinkQueue* Q)
{
QueuePtr p;
int length=0;
p=Q->front->next;
if(p==NULL)
return 0;
else
{
while(p!=NULL)
{
length++;
p=p->next;
}
return(length);
};
}//QueueLength
Status DeQueue(LinkQueue* Q,CarInfo* e)
{
//将队列Q的队头元素出队,并存放到e中
QueuePtr p;
if( Q->front==Q->rear )
return FALSE; //空队出错
p=Q->front->next; //记住要删除的结点
Q->front->next=p->next; //队头元素p出队
if( Q->rear==p )
Q->rear=Q->front; //如果队中只有一个元素p,则p出队后成为空队
*e=p->data;
free(p); //释放存储空间
return TRUE;
}//DeQueue
//若队列不空,则用e返回Q的队头元素,否则返回FALSE
Status GetTopQueue(LinkQueue* Q,CarInfo *e)
{
if(Q->front==Q->rear)
return FALSE;//若队列为空,返回FALSE
*e=Q->front->next->data;
return TRUE;
}//GetTopQueue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -