堆的實現
#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
- 堆的原理與實現
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- PHP 實現堆, 堆排序以及索引堆PHP排序索引
- 大頂堆的python實現Python
- 堆的原理以及實現O(lgn)
- 【練習】串的堆分配實現
- 串的堆分配表示與實現
- 【筆記】堆及其實現筆記
- 圖的深度優先遍歷[非堆疊、堆疊實現]
- 堆的定義、特點及實現
- php實現一個簡單的堆PHP
- 左傾堆以及Java實現Java
- 大根堆和堆排序的原理與實現排序
- 4.16 實現自己的堆管理器
- 堆疊的實現(1)--靜態陣列陣列
- Rust 中的Box型別實現堆分配Rust型別
- 基於"堆"的底層實現和應用
- 優先佇列的一種實現方式—堆佇列
- Python實現堆疊與佇列Python佇列
- java使用PriorityQueue即優先佇列實現大根堆和小根堆Java佇列
- 使用C#實現資料結構堆C#資料結構
- 二叉堆實現優先佇列佇列
- Photopile JS – 幫助你實現精緻的照片堆疊效果JS
- Python資料結構——二叉堆的實現Python資料結構
- 資料結構&堆&heap&priority_queue&實現資料結構
- Python實現堆疊和佇列詳解Python佇列
- 說說你對堆的理解?如何實現?應用場景?
- c語言的一結構資料的堆疊實現問題薦C語言
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- Java經典例項:實現一個簡單堆疊Java
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- Linux堆管理實現原理學習筆記 (上半部)Linux筆記
- 驅動開發:透過應用堆實現多次通訊
- 大根堆和小根堆的介紹
- C#中堆和堆疊的區別C#
- 堆的學習
- 測試平臺-flask_admin+mongodb+pyechart 實現堆疊和翻頁FlaskMongoDB