堆疊的各種演算法

2021-09-10 21:21:03 字數 3636 閱讀 9290

各種基本演算法實現小結(二)—— 堆 棧

(均已測試通過)

棧——陣列實現

測試環境:win - tc

[cpp]view plain

copy

print?

#include 

char stack[512];  

int top=0;  

void push(char c)  

char pop()  

int is_empty()  

void main()    

執行結果:

棧——陣列實現2

測試環境:win - tc

[cpp]view plain

copy

print?

#include 

#include 

/* typedef int datatype; */

#define datatype int

#define max 1024

typedef

struct

stack, *pstack;  

pstack *init_stack()  

ps->top=-1;  

return ps;  

}  int empty_stack(pstack ps)  

int push(pstack ps, datatype data)  

ps->top++;  

ps->data[ps->top]=data;  

return 1;  

}  int pop(pstack ps, datatype *data)  

*data=ps->data[ps->top];  

ps->top--;  

return 1;  

}  datatype top_stack(pstack ps)  

return ps->data[ps->top];  

}  void display(pstack ps)  

printf("printf the items of stack.../n");  

for(i=ps->top;i>-1;i--)  

printf("%4d", ps->data[i]);  

printf("/n/n");  

}  void main()  

display(ps);  

printf("top is %d/n/n", top_stack(ps));  

for(i=0;i  

printf("/n/n");  

display(ps);  

getch();  

}  

執行結果:

棧——鍊錶實現

測試環境:win - tc

[cpp]view plain

copy

print?

#include 

#include 

typedef

char datatype;  

struct _node  

;  typedef

struct _node node, *pstack;  

pstack init_stack()  

char pop()  

int is_empty()  

void main()    

執行結果:

棧——陣列實現2

測試環境:win - tc

[cpp]view plain

copy

print?

#include 

#include 

/* typedef int datatype; */

#define datatype int

#define max 1024

typedef

struct

stack, *pstack;  

pstack *init_stack()  

ps->top=-1;  

return ps;  

}  int empty_stack(pstack ps)  

int push(pstack ps, datatype data)  

ps->top++;  

ps->data[ps->top]=data;  

return 1;  

}  int pop(pstack ps, datatype *data)  

*data=ps->data[ps->top];  

ps->top--;  

return 1;  

}  datatype top_stack(pstack ps)  

return ps->data[ps->top];  

}  void display(pstack ps)  

printf("printf the items of stack.../n");  

for(i=ps->top;i>-1;i--)  

printf("%4d", ps->data[i]);  

printf("/n/n");  

}  void main()  

display(ps);  

printf("top is %d/n/n", top_stack(ps));  

for(i=0;i  

printf("/n/n");  

display(ps);  

getch();  

}  

執行結果:

棧——鍊錶實現

測試環境:win - tc

[cpp]view plain

copy

print?

#include 

#include 

typedef

char datatype;  

struct _node  

;  typedef

struct _node node, *pstack;  

pstack init_stack()  

{  pstack ps;  

ps=(pstack)malloc(sizeof(node));  

if(null == ps)  

{  printf("error. malloc is fail.../n");  再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

堆疊排序演算法

堆排序 維護的二叉樹是一顆完全二叉樹,大頂堆用來公升序排序,要求父節點大於等於左右子節點。而小丁堆用來降序排序,要求父節點小於等於左右子節點。堆排序 如果按公升序排序,就維護最大堆,降序就維護最小堆 這裡我們按公升序講 每次把最大元素放在堆頂,然後交換陣列的頭尾兩個元素,這樣陣列的最後乙個 元素就是...

演算法總結 堆疊

先說stack的題目 stack的實現 鍊錶,陣列 題目 1 簡單的 min stack,乙個陣列實現三個stack 2 經典的stack問題 經典漢諾塔問題,逆波蘭式計算或者產生逆波蘭式,簡化檔案路徑,驗證括號對是否合法,找出最長有效括號 貪心 stack求解 3 涉及tree的遍歷問題 tree...

堆疊演算法筆記

堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。堆 資料結構 堆可以被看成是一棵樹,如 堆排序。進出順序隨意 棧 資料結構 一種先進後出的資料結構。可以看到sort heap時,必須先是乙個堆 兩個特性 1 最大元素在第乙個 2 新增或者刪除元素以對數時間...