#包含“stdio.h”
#包含" stdlib.h "
#包含“io.h”
#包含“math.h”
#包含“time.h”
#定義OK 1
#定義錯誤0
#定義真1
#定義假0
#define MAXSIZE 20 /*存儲空間的初始分配*/
typedef int狀態;
typedef int QElemType/* qelemtype的類型取決於實際情況,假設為int */
Typedef結構QNode /*節點結構*/
{
QElemType數據;
struct QNode * next
}QNode,* QueuePtr
Typedef struct /*隊列的鏈表結構*/
{
QueuePtr前、後;/*團隊領導和團隊尾指針*/
} LinkQueue
狀態訪問(QElemType c)
{
printf("%d ",c);
退貨OK;
}
/*構造壹個空隊列Q */
狀態初始化隊列(鏈接隊列*Q)
{
q->;front = Q-& gt;rear =(queue ptr)malloc(sizeof(QNode));
如果(!q->;正面)
退出(溢出);
q->;正面-& gt;next = NULL
退貨OK;
}
/*銷毀隊列Q */
狀態銷毀隊列(鏈接隊列*Q)
{
while(Q->;正面)
{
q->;rear = Q-& gt;正面-& gt;接下來;
免費(Q->;正面);
q->;front = Q-& gt;後方;
}
退貨OK;
}
/*將Q清除到空隊列*/
狀態清除隊列(鏈接隊列*Q)
{
QueuePtr p,q;
q->;rear = Q-& gt;正面;
p = Q-& gt;正面-& gt;接下來;
q->;正面-& gt;next = NULL
while(p)
{
q = p;
p = p-& gt;接下來;
免費(q);
}
退貨OK;
}
/*如果Q是空隊列,則返回TRUE,否則返回FALSE */
狀態隊列空(鏈接隊列Q)
{
if(Q.front==Q.rear)
返回TRUE
其他
返回FALSE
}
/*求隊列的長度*/
int QueueLength(鏈接隊列Q)
{
int I = 0;
queue ptr p;
p = Q.front
而(Q.rear!=p)
{
i++;
p = p-& gt;接下來;
}
返回I;
}
/*如果隊列不為空,用e返回Q的隊列頭元素,返回OK,否則返回ERROR */
狀態GetHead(鏈接隊列Q,QElemType *e)
{
queue ptr p;
if(Q.front==Q.rear)
返回錯誤;
p = q . front-& gt;接下來;
* e = p-& gt;數據;
退貨OK;
}
/*插入壹個新的尾部元素,其元素E是Q */
狀態排隊(鏈接隊列*Q,隊列類型e)
{
queue ptr s =(queue ptr)malloc(sizeof(QNode));
如果(!S) /*存儲分配失敗*/
退出(溢出);
s-& gt;數據= e;
s-& gt;next = NULL
q->;後方-& gt;next = s;/*將帶有元素E的新節點S分配給原尾節點的後繼,如圖① */
q->;rear = s;/*設置當前S為隊列的結束節點,後方指向S,如圖② */
退貨OK;
}
/*如果隊列不為空,刪除Q的隊列頭元素,用E返回其值,返回OK,否則返回ERROR */
狀態出列(鏈接隊列*Q,隊列類型*e)
{
queue ptr p;
如果(Q->;front = = Q-& gt;後部)
返回錯誤;
p = Q-& gt;正面-& gt;接下來;/*將要刪除的組長節點臨時存儲到P中,如圖① */
* e = p-& gt;數據;/*將要刪除的隊列頭節點的值賦給e */
q->;正面-& gt;next = p-& gt;接下來;/*將原組長節點的繼任者替換為p->;Next給頭節點的後繼節點賦值,如圖② */
如果(Q->;Rear==p) /*如果隊頭是隊尾,則刪除,將後方指向頭節點,如圖③ */
q->;rear = Q-& gt;正面;
免費(p);
退貨OK;
}
/*輸出*/
狀態隊列遍歷(鏈接隊列Q)
{
queue ptr p;
p = q . front-& gt;接下來;
while(p)
{
請訪問(p->;數據);
p = p-& gt;接下來;
}
printf(" \ n ");
退貨OK;
}
int main()
{
int I;
QElemType d;
link queue q;
I = init queue(& amp;q);
如果(我)
Printf("成功構造了壹個空隊列!\ n ");
排隊(& ampq,-5);
排隊(& ampq,5);
排隊(& ampq,10);
Printf("插入三個元素(-5,5,10)後,隊列長度為%d\n ",queue length(q));
Printf("隊列的元素是:");
queue traverse(q);
i=GetHead(q,& ampd);
如果(i==OK)
Printf("隊列頭元素為:%d\n ",d);
出列(& amp問& ampd);
Printf("已刪除的隊列頭元素%d\n ",d);
i=GetHead(q,& ampd);
如果(i==OK)
Printf("新組長元素為:%d\n ",d);
clear queue(& amp;q);
Printf("清除隊列後,q . front = % q . front = % u q . rear = % u q . front->-->;next=%u\n ",q.front,q.rear,q . front-& gt;下壹個);
destroy queue(& amp;q);
Printf("銷毀隊列後,q.front =% u.q.rear =% u \ n ",q.front,q . rear);
返回0;
}
這是壹個二叉樹後序遍歷代碼:
void後序(二叉樹根)
{
if(root==NULL)
返回;
後序(根-& gt;l child);//遞歸調用,然後遍歷左子樹。
後序(根-& gt;rchild);//遞歸調用,然後遍歷右邊的子樹。
printf("%c ",root-& gt;數據);//輸出數據
}
希望能幫到妳。如果還是不明白,可以加我QQ:11301655。