層次遍歷引入佇列解決,佇列

2021-08-08 15:59:11 字數 1643 閱讀 3855

單鏈表的快速排序

線索化二叉樹結構體:

typedef

char elemtype;

typedef

enumpointtag;

typedef

struct bithrnode

bithrnode * threadbinarytree;

//線索化輸出

層次遍歷引入佇列解決:

//層次遍歷二叉樹   用佇列解決

void levelorder(btnode *ptr)

queue q;

init_queue(&q);

push_queue(&q,ptr); //將ptr的值賦予佇列

while(!empty_queue(&q))

if (ptr->rightchild !=

null)

}destroy_queue(&q); //摧毀二叉樹

}//列印二叉樹的第k層元素 不用佇列解決

void printfk(btnode *ptr,int k)

if (ptr->leftchild !=

null)

if (ptr->rightchild !=

null)

}void print_kleveldata(btnode *ptr,int k) //列印第k層元素

printfk(ptr,k); //函式

}

佇列的結構體:

#include 

#include

#include

#include

#include "queue.h"

#define maxsize 10

//第一種結構體 //放入標頭檔案queue.h中

typedef

int elemtype;

typedef

struct

queue;

//第二種結構體

typedef

struct

queue;

//初始化乙個佇列

void init_queue(queue *p)

//摧毀佇列

void destroy_queue(queue *p)

//入佇列

bool push_queue(queue *p,elemtype value)

p->data[p->tail] = value; //從尾部入佇列

p->tail++;

p->cursize++;

return

true;

}//出佇列

//空佇列

bool empty_queue(queue *p)

//滿佇列

bool full_queue(queue *p)

//返回佇列頭

elemtype queue_front(queue *p)

//返回佇列尾

elemtype queue_tail(queue *p)

//佇列當前大小

int size_queue(queue *p,elemtype value)

迴圈佇列的入佇列和出佇列

如果希望迴圈佇列中的元素都能得到利用,則需要設定乙個標誌域 tag,並以 tag 的值為0或1來區分,尾指標和頭指標相同時的佇列狀態是 空 還是 滿 試編寫與此結構相應的入佇列和出佇列的演算法。include include define maxsize 10 typedef struct queu...

優先隊列入隊操作

效果展示 這裡我們從陣列的一號位置開始儲存 那麼在二叉樹中的規律是 如上圖所示,我們發現,連線的間隔越是往後,距離就越大,而且正好是2的倍數,間隔呈現2,4,8那樣增長 由於parent i i 2,如上圖所示,15位置是 10 那麼他的父親節點位置是 5,也就是41,41的位置是5,那麼他父親節點...

鏈佇列的入隊 出隊

test demo.cpp 定義控制台應用程式的入口點。include stdafx.h include stdio.h include windows.h define queuesize 100 假定預分配的佇列空間最多為100個元素 typedef char datatype 假定佇列元素的資...