#pragma once
#include
#include
#include
typedef
int qdatatype;
typedef
struct qlistnode
qnode;
// 佇列的結構
typedef
struct queue
queue;
// 初始化佇列
void
queueinit
(queue* q)
;// 隊尾入佇列
void
queuepush
(queue* q, qdatatype data)
;// 隊頭出佇列
void
queuepop
(queue* q)
;// 獲取佇列頭部元素
qdatatype queuefront
(queue* q)
;// 獲取佇列隊尾元素
qdatatype queueback
(queue* q)
;// 獲取佇列中有效元素個數
intqueuesize
(queue* q)
;// 檢測佇列是否為空,如果為空返回非零結果,如果非空返回0
intqueueempty
(queue* q)
;// 銷毀佇列
void
queuedestroy
(queue* q)
;
#include
"binarytree.h"
btnode*
binarytreecreate
(btdatatype* a,
int n,
int* pi)
btnode* root =
(btnode*
)malloc
(sizeof
(btnode));
root-
>_data = a[
*pi];(
*pi)++;
root-
>_left =
binarytreecreate
(a, n, pi);(
*pi)++;
root-
>_right =
binarytreecreate
(a, n, pi)
;return root;
}void
binarytreedestory
(btnode* root)
free
(root)
;binarytreedestory
(root-
>_left)
;binarytreedestory
(root-
>_right);}
intbinarytreesize
(btnode* root)
return1+
binarytreesize
(root-
>_left)
+binarytreesize
(root-
>_right);}
intbinarytreeleafsize
(btnode* root)
if(root-
>_left ==
null
&& root-
>_right ==
null
)return
binarytreeleafsize
(root-
>_left)
+binarytreeleafsize
(root-
>_right);}
intbinarytreelevelksize
(btnode* root,
int k)
if(k ==1)
return
binarytreelevelksize
(root-
>_left, k -1)
+binarytreelevelksize
(root-
>_right, k -1)
;}btnode*
binarytreefind
(btnode* root, btdatatype x)
if(root-
>_data == x)
binarytreefind
(root-
>_left, x)
;binarytreefind
(root-
>_right, x);}
void
binarytreeprevorder
(btnode* root)
printf
("%c "
, root-
>_data)
;binarytreeprevorder
(root-
>_left)
;binarytreeprevorder
(root-
>_right);}
void
binarytreeinorder
(btnode* root)
binarytreeinorder
(root-
>_left)
;printf
("%c "
, root-
>_data)
;binarytreeinorder
(root-
>_right);}
void
binarytreepostorder
(btnode* root)
binarytreepostorder
(root-
>_left)
;binarytreepostorder
(root-
>_right)
;printf
("%c "
, root-
>_data);}
void
binarytreelevelorder
(btnode* root)
if(root !=
null
)while(!
queueempty
(&q))if
(front-
>_right)
}queuedestroy
(&q);}
intbinarytreecomplete
(btnode* root)
if(root !=
null
)while(1
)queuepush
(&q, front-
>_left)
;queuepush
(&q, front-
>_right);}
while(!
queueempty
(&q))}
return1;
}
佇列實現 佇列的鏈式結構實現
佇列的實現,用單鏈表實現佇列的結構 1 初始化建立佇列 2 釋放佇列 3 清空佇列 4 計算佇列長度 5 判斷佇列是否為空 6 列印佇列元素 7 入隊操作 隊尾插入 8 出隊操作 隊首刪除 include typedef int datatype struct qnode struct lqueue...
佇列的實現(一)順序佇列的實現
佇列 只能一端進行出棧一端進行進棧。隊首 只允許進行出棧操作,可以進行刪除。隊尾 只允許進行入棧操作,可以進行插入。隊尾進,隊尾出,先進先出。所以佇列的實現也有兩種形式,一種是陣列實現佇列,一種是用鍊錶實現佇列。首先是用陣列來實現佇列。使用陣列佇列,因為在刪除時front會越來越大,所以最後會出現一...
佇列 迴圈佇列的實現
為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...