?? queue.h
字號:
/****************************************queue.h*************************************************/
/*
定義了隊列常用操作函數(shù)
*/
typedef struct QNode
{
CarInfo data; //數(shù)據(jù)域
struct QNode *next; //指針域
}QNode, *QueuePtr; //定義鏈隊列結(jié)點
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue; //定義鏈隊列頭尾指針
//初始化隊列
Status InitQueue(LinkQueue* Q);
//銷毀隊列
Status DestroyQueue(LinkQueue* Q);
//判斷隊列是否為空,為空返回TRUE,否則返回FALSE
Status QueueEmpty(LinkQueue* Q);
//將數(shù)據(jù)元素e插入到隊列的隊尾
Status EnQueue(LinkQueue* Q,CarInfo *e);
//將Q清空為空隊列
Status ClearQueue(LinkQueue* Q);
//返回隊列Q的元素個數(shù),即為隊列長度
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); //釋放頭結(jié)點
return TRUE;
}//DestroyQueue
//判斷隊列是否為空,為空返回TRUE,否則返回FALSE
Status QueueEmpty(LinkQueue* Q)
{
if(Q->front->next)
return FALSE;
return TRUE;
}//QueueEmpty
//將數(shù)據(jù)元素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的元素個數(shù),即為隊列長度
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; //記住要刪除的結(jié)點
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 + -