佇列的實現

2021-10-08 15:55:05 字數 3569 閱讀 4965

#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...