棧:先進後出。
進製轉換原理圖:
下面是棧的**
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 #includeps:有**寫的不對的,請指正,互相學習。#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)
}
佇列,二叉樹
一 佇列。1 什麼是佇列?在一條儲存結構中,插入節點與刪除節點分別在兩端進行,例如 插入資料在隊尾插入,刪除資料在隊頭進行,那麼這種邏輯關係就是叫做佇列,其特點 先進先出,後進後出。插入資料到佇列中 入隊。從佇列中刪除資料 出隊。2 設計佇列管理結構體和節點結構體。1 管理佇列的結構體。struct...
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...