棧 佇列和二叉樹

2022-04-28 23:54:13 字數 4110 閱讀 5433

棧:先進後出。

進製轉換原理圖:

下面是棧的**

stack.h

#ifndef stack_h

#define stack_h#include

#include

#include

typedef

struct

stacknodestack;

//建立棧節點/棧--建立單鏈表節點

struct stacknode *create_node(elemtype data0;

//壓棧

bool push_stack(stack*頭皮,elemtype data);

//出棧--單鏈表頭刪法

bool pop_stack(stack *top,elemtype *data);

#endif

stack.c

#include "stack.h"

//建立棧節點/棧--建立單鏈表節點

struct stacknode *create_node(elemtype data)

node->data = data;

node->next = null;

return node;

}//壓棧--單鏈表頭插法

bopl push_stack(stack *top,elemtype data)

//出棧--單鏈表頭刪法

bool delete_stack(stack *top,elemtype *data)

stack *node = top->next;

if(node == null)

//把node從棧上刪除

top->next =node->next;

//先把node中的資料存好再刪除節點

*data = node->data;

free(node);

node = null;

return true;

}

1

1棧.c

23 #include 4 #include "

stack.h"5

6int

main715

16//

出棧17

int data = 0;18

while(pop_stack(top,&data))

19 printf("%d"

,data);

20 printf("\n"

);21

22//

棧實現進製轉換

23int obj = 0

;24 scanf("

%d",&obj);

2526

while

(obj)

2731

while(pop_stack(top,&data));

32 printf("%d"

,data);

33 printf("\n"

);34

35return0;

36 }

佇列:先進先出

下面是佇列的**:

1佇列.c

#include

#include

#include

#include

typedef int elemtype;

struct node;

typedef struct _queue

queue;

//建立佇列

queue *create_queue(0

//入佇列--鍊錶尾插法

bool enter_queue(queue *q,elemtype data)

if(q->length == 0)//隊列為空

else

return true;

}//出佇列--煉表頭刪法

bool out_queue(queue *q,elemtype data)

if(q->length == 0)

//從start開始刪除資料

if(q->start == q->end)

else

return true;

}int get_queue_length(queue *q)

return q->length;

}int main

int data = 0;

while(out_queue(q,&data)

printf("%d",data);

return 0;

}

二叉樹樹的基本概念:樹只有乙個根節點,多個葉節點。樹的層數,樹的深度,樹的葉子。

二叉樹:乙個根節點,每個節點最多兩個直接後繼。

二叉樹的特性:

完全二叉樹:

滿二叉樹:

設計二叉樹

struct

btree

二叉樹的遍歷:

前序遍歷:先根節點,在左葉子,最後右葉子。(前序遍歷第乙個就是根節點)

中序遍歷:先左節點,再根節點,最後右節點。(中序遍歷根節點左邊是左邊的樹,右邊是右邊的樹)

後序遍歷:先左節點,再右節點,最後根節點。(後序遍歷最後乙個是根節點)

前序遍歷:abdefgch

中序遍歷:dbfegahc

後序遍歷:dfgebhca

前序遍歷:abcedfgh

中序遍歷:becagfhd

寫出後序遍歷

二叉樹遞迴遍歷的實現

原理圖

#include <

#include

typedef struct btree

bitree;

//前序建立樹

bitree *create_tree()

else

}//三種遍歷都是不停地遞迴,直到這邊遍歷完了,再遞迴遍歷另一邊

//前序遍歷

void show_tree(bitree *root)

//中序遍歷

void_mid_tree(bitree *root)

//後序遍歷

void tail_tree(bitree *root)

//銷毀二叉樹

void destroy_tree(bitree *root)

int main()

下面是二叉樹的非遞迴遍歷的實現

#include #include 

#include

typedef struct btree

bitree;

//建立乙個棧--鍊錶

typedef struct stack

stack;

//建立乙個棧

stack *create_node(bitree *node)

//壓棧

bool push_stack(stack *top,bitree *node)

//出棧

bitree *pop_stack(stack *top)

//前序建立樹

bitree *create_tree()

else

}int main()

if(otree->lchild != null)

}

ps:有**寫的不對的,請指正,互相學習。

佇列,二叉樹

一 佇列。1 什麼是佇列?在一條儲存結構中,插入節點與刪除節點分別在兩端進行,例如 插入資料在隊尾插入,刪除資料在隊頭進行,那麼這種邏輯關係就是叫做佇列,其特點 先進先出,後進後出。插入資料到佇列中 入隊。從佇列中刪除資料 出隊。2 設計佇列管理結構體和節點結構體。1 管理佇列的結構體。struct...

二叉樹 滿二叉樹和完全二叉樹

二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...

二叉樹和完全二叉樹

二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...