網站首頁 編程語言 正文
基本理論
- 棧是一種線性數據結構,遵循先進后出的原則;
- 存儲以及數據查找時,只能在一端操作;
- 棧的運用:作進制轉換、括號匹配等;
注:數據結構系列將持續更新,歡迎交流討論…
棧抽象結構圖
代碼實現
- 需要說明的是,展示代碼中將棧置空的函數 Empty() 函數做的是邏輯上的清空,并不是真正的清空;
- 其中,主函數中還展示了棧作進制轉換的代碼;
/*
pop
top
push
size
isEmpty
進制轉換
先進后出
*/
#include <iostream>
using namespace std;
typedef struct DATA
{
int data;
DATA* next;
}*pData;
class Stack
{
public:
Stack(int);
pData initData();//初始化數據結點
int push(int data);//入棧操作
int pop();//出棧
int top();//返回棧頂元素
int size();//返回棧容量大小
bool isEmpty();//判斷棧是否為空
void empty();//將棧作邏輯上的置空
private:
int curSize;
int Size;
DATA* stackTop;
};
int main()
{
Stack* pStk = new Stack(10);
if (pStk->isEmpty())
{
cout << "棧為空..." << endl;
}
pStk->push(1);
pStk->push(2);
pStk->push(3);
pStk->push(4);
pStk->push(5);
while (!pStk->isEmpty())
{
cout << pStk->top() << " ";
pStk->pop();
}
cout << endl << "棧的容量為:" << pStk->size() << endl;
pStk->empty();
if (pStk->isEmpty())
{
cout << "棧為空..." << endl;
}
pStk->push(1);
pStk->push(2);
pStk->push(3);
while (!pStk->isEmpty())
{
cout << pStk->top() << " ";
pStk->pop();
}
cout << endl;
//棧簡單的運用:進制轉換
Stack* pChange = new Stack(12);
int num = 520;
while (num)
{
pChange->push(num % 2);
num /= 2;
}
while (!pChange->isEmpty())
{
cout << pChange->top();
pChange->pop();
}
return 0;
}
Stack::Stack(int maxSize):Size(maxSize)
{
curSize = 0;
stackTop = initData();
}
pData Stack::initData()
{
pData newNode = new DATA;
newNode->data = -1;
newNode->next = nullptr;
return newNode;
}
int Stack::push(int data)
{
if (curSize >= Size)
{
return -1;
}
pData newNode = initData();
newNode->data = data;
newNode->next = stackTop;
stackTop = newNode;
curSize++;
return 1;
}
int Stack::pop()
{
if (curSize > 0)
{
pData nextNode = stackTop->next;
free(stackTop);
stackTop = nextNode;
curSize--;
return 1;
}
return -1;
}
int Stack::top()
{
if (curSize > 0)
{
return stackTop->data;
}
return INT_MAX;
}
int Stack::size()
{
return this->Size;
}
bool Stack::isEmpty()
{
return this->curSize == 0;
}
void Stack::empty()
{
this->curSize = 0;
}
插入數據時指針的指向變化
運行截圖
原文鏈接:https://blog.csdn.net/qq_46282869/article/details/126217132
- 上一篇:數據結構之數組棧的實現
- 下一篇:數據結構之有頭鏈表的實現
相關推薦
- 2022-11-09 grep正則表達式匹配中括號的方法實例_正則表達式
- 2022-04-12 React工作流程及Error?Boundaries實現過程講解_React
- 2024-03-19 Rust 中Self 關鍵字的兩種不同用法
- 2022-08-10 C語言折半查找法的超詳細講解_C 語言
- 2021-12-16 linux下wget命令的基本使用方法_Linux
- 2022-07-28 C++圖文并茂講解繼承_C 語言
- 2023-11-14 樹莓派上如何安裝anaconda/miniconda環境配置
- 2022-09-20 Xmind用例導入到TAPD的解決方案_其它綜合
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支