堆的實現
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node * pNext;
}NODE,*PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBotton;
}STACK,*PSTACK;
void init(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
cout << "動態記憶體分配失敗" << endl;
exit(-1);
}
else
{
pS->pBotton = pS->pTop;
pS->pTop->pNext = NULL;
}
}
void push(PSTACK pS, int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
cout << "動態記憶體分配失敗" << endl;
exit(-1);
}
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return;
}
void traverse(PSTACK pS)
{
PNODE p = pS->pTop;
while (p != pS->pBotton)
{
cout << p->data << " ";
p = p->pNext;
}
return;
}
bool empty(PSTACK pS)
{
if (pS->pBotton == pS->pTop)
return true;
else
return false;
}
bool pop(PSTACK pS, int * val)
{
if (empty(pS))
{
return false;
}
else
{
PNODE r = pS->pTop;
*val = r->data;
pS->pTop = r->pNext;
free(r);
r = NULL;
}
return true;
}
void clear(PSTACK pS)
{
while (pS->pTop != pS->pBotton)
{
PNODE r = pS->pTop;
pS->pTop = r->pNext;
free(r);
r = NULL;
}
/*if (empty(pS))
{
return;
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while (p != pS->pBotton)
{
q = pS->pTop->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBotton;
}*/
}
int main()
{
STACK S;
int pVal;
init(&S);
push(&S,1);
push(&S,2);
push(&S, 3);
push(&S, 4);
push(&S, 5);
push(&S, 6);
push(&S, 7);
push(&S, 8);
traverse(&S);
if (pop(&S, &pVal))
{
cout << "出棧成功" << "出棧的是:" <<pVal<<endl;
}
else
{
cout << "出棧失敗" << endl;
}
traverse(&S);
clear(&S);
traverse(&S);
system("pause");
return(0);
}
相關文章
- 堆和索引堆的python實現索引Python
- 堆的原理與實現
- 大頂堆的python實現Python
- PHP 實現堆, 堆排序以及索引堆PHP排序索引
- 堆的原理以及實現O(lgn)
- 4.16 實現自己的堆管理器
- 堆的定義、特點及實現
- 堆疊的實現(1)--靜態陣列陣列
- Rust 中的Box型別實現堆分配Rust型別
- Python實現堆疊與佇列Python佇列
- 基於"堆"的底層實現和應用
- 大根堆和堆排序的原理與實現排序
- 二叉堆實現優先佇列佇列
- 使用C#實現資料結構堆C#資料結構
- java使用PriorityQueue即優先佇列實現大根堆和小根堆Java佇列
- 說說你對堆的理解?如何實現?應用場景?
- 資料結構&堆&heap&priority_queue&實現資料結構
- [原創] 現實世界的堆漏洞利用圖鑑-2021-10-06更新
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- Linux堆管理實現原理學習筆記 (上半部)Linux筆記
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 驅動開發:透過應用堆實現多次通訊
- 測試平臺-flask_admin+mongodb+pyechart 實現堆疊和翻頁FlaskMongoDB
- 大根堆和小根堆的介紹
- 【matplotlib 實戰】--堆疊面積圖
- 堆的學習
- 6-1 在一個陣列中實現兩個堆疊 (20分)陣列
- P3045 [USACO12FEB] Cow Coupons G (用堆實現反悔貪心)
- 堆
- git rebase master 分支出現一堆 ^MGitAST
- 羊年核心堆風水: “Big Kids’ Pool”中的堆噴技術
- JVM中堆的介紹JVM
- Thrift的網路堆疊
- 堆和堆傻傻分不清?一文告訴你 Java 集合中「堆」的最佳開啟方式Java
- 樹堆
- 堆 todo
- HarmonyOS NEXT應用開發實戰—元件堆疊元件
- 幽默:恭喜,您將單堆疊的單體變成了n個微服務,然後您發現自己的微服務緊密耦合,現在已經有43個不同的堆疊,每個堆疊都有自己的故障模式,您玩得開心!- Ian Miell微服務模式
- 樹7 堆中的路徑