單鏈表的快速排序
線索化二叉樹結構體:
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 假定佇列元素的資...