?? linkqueue.c
字號:
#include "stdafx.h"
Status InitQueue(LinkQueue* Q)
{
// 構造一個空隊列Q,該隊列是帶頭結點的
Q->front=Q->rear = (QueuePtr) malloc(sizeof(QNode)) ;
if(!Q->front) exit(1); //存儲分配失敗
Q->front->next = NULL ;
return OK;
}
Status DestroyQueue(LinkQueue* Q)
{ // 銷毀隊列Q
while(Q->front)
{
Q->rear = Q->front->next ;
free(Q->front) ;
Q->front = Q->rear ;
}
Q->front = Q->rear = NULL;
return OK;
}
Status ClearQueue(LinkQueue* Q)
{//清空隊列里的元素
DestroyQueue(Q);
InitQueue(Q);
return OK;
}
int QueueEmpty(LinkQueue* Q)
{ //隊列空則返回true , 否則返回false
if(Q->front==Q->rear) return 1;
else return 0;
}
int QueueLength(LinkQueue* Q)
{ //獲取隊列的長度
QueuePtr p= Q->front ;
int length=0;
for(length=0;p->next != NULL;p=p->next,length++);
return length;
}
Status GetHead(LinkQueue* Q,int* e)
{
//獲得隊列的頭結點
if(Q->rear == Q->front) return -1;
*e = Q->front->next->data;
return OK;
}
Status EnQueue(LinkQueue* Q,int e)
{
//插入元素e為Q的新的隊尾元素。
QueuePtr p = (QueuePtr) malloc(sizeof(QNode)) ;
if(!p) exit(1) ; //分配存儲空間失敗
p->data = e;
p->next = NULL;
Q->rear ->next = p;
Q->rear = p;
return OK;
}
Status DeQueue(LinkQueue* Q,int* e)
{
//若隊列不空,則刪除Q的隊頭元素,并用e返回隊頭元素的值
if(Q->front==Q->rear) return ERROR;
QueuePtr p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p) Q->rear = Q->front ; //刪除的是尾結點
free(p);
p=NULL;
return 0;
}
Status QueueTraverse(LinkQueue* Q)
{//從隊頭到隊尾依次對隊列Q中的每一個元素進行遍歷
QueuePtr temp=Q->front;
for(;temp!=Q->rear;temp=temp->next)
{
printf("%d ",temp->data);
}
return OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -