当前位置: 首页 > news >正文

数据结构 C++ 链式栈

节点结构

// 结点类 
class Node
{
public:// 构造函数 Node(int val): next_(nullptr), data_(val) {}public:// 节点的下一个节点 Node* next_;// 节点的值 int data_;	
};

方法

入栈

    // 入栈 void push(int val){if(this->isFull())  {std::cout << "Stack capacity is full!" <<std::endl;return;}Node* current = new Node(val);current->next_ = this->head_;this->head_ = current;this->size_++;}

出栈

	// 出栈int pop(){if(isEmpty()){std::cout << "Stack is Empty!" << std::endl; return -1;		}Node* temp = this->head_;int val = temp->data_;this->head_ = temp->next_;delete temp;this->size_--;return val;} 

获取栈顶元素

	// 获取栈顶元素 int top() const{if(isEmpty()){std::cout << "Stack is Empty!" << std::endl; return -1;		}return this->head_->data_;}

遍历栈

	// 遍历栈 void printfStack(){if(isEmpty()) {std::cout << "Stack is Empty!" << std::endl; return;		} Node* current = this->head_;int index = 0;while(current != nullptr){std::cout << "Stack[" << index << "]" << current->data_ << std::endl;current= current->next_;++index; } }

清空栈

	// 清空栈void clear(){while(!isEmpty()) {pop();} }

获取栈大小

	// 获取栈大小 int size() const{return this->size_;}

判断栈空

	// 判断栈空 bool isEmpty() const {return this->size_ == 0;}

判断栈满

	// 判断栈满bool isFull() const {return this->size_ == this->capacity_;} 

完整代码

#pragma once#include <iostream>// 结点类 
class Node
{
public:// 构造函数 Node(int val): next_(nullptr), data_(val) {}public:// 节点的下一个节点 Node* next_;// 节点的值 int data_;	
};// 链式栈 
class LinkStack
{
public:// 默认构造LinkStack() : head_(nullptr), size_(0), capacity_(100){}// 有参构造 LinkStack(int value) : head_(nullptr), size_(0), capacity_(value){}~LinkStack(){clear();	} // 入栈 void push(int val){if(this->isFull()){std::cout << "Stack capacity is full!" <<std::endl;return;}Node* current = new Node(val);current->next_ = this->head_;this->head_ = current;this->size_++;}// 出栈int pop(){if(isEmpty()){std::cout << "Stack is Empty!" << std::endl; return -1;		}Node* temp = this->head_;int val = temp->data_;this->head_ = temp->next_;delete temp;this->size_--;return val;} // 获取栈顶元素 int top() const{if(isEmpty()){std::cout << "Stack is Empty!" << std::endl; return -1;		}return this->head_->data_;}// 遍历栈 void printfStack(){if(isEmpty()) {std::cout << "Stack is Empty!" << std::endl; return;		} Node* current = this->head_;int index = 0;while(current != nullptr){std::cout << "Stack[" << index << "]" << current->data_ << std::endl;current= current->next_;++index; } }// 清空栈void clear(){while(!isEmpty()) {pop();} }// 获取栈大小 int size() const{return this->size_;}// 判断栈空 bool isEmpty() const {return this->size_ == 0;}// 判断栈满bool isFull() const {return this->size_ == this->capacity_;} private:// 头节点 Node* head_;// 栈大小 int size_;// 栈容量int capacity_; 
};

测试代码

#include <iostream>#include "LinkStack.h" int main() 
{LinkStack *link_ = new LinkStack(5);// 测试栈大小 std::cout << "size: " << link_->size() << std::endl; // 测试为空 std::cout << "isEmpty: " << link_->isEmpty() << std::endl; // 测试插入 link_->push(1);link_->push(2);link_->push(3);link_->push(4);link_->push(5);link_->printfStack();std::cout << "isEmpty: " << link_->isEmpty() << std::endl; std::cout << "size: " << link_->size() << std::endl; // 测试栈顶 std::cout << "top: " << link_->top() << std::endl; // 测试清除 link_->clear();link_->printfStack();// 测试栈容量 std::cout << "isFull: " << link_->isFull() << std::endl;// 测试满栈 link_->push(1);link_->push(2);link_->push(3);link_->push(4);link_->push(5);link_->push(6);std::cout << "isFull: " << link_->isFull() << std::endl;return 0; 
}
http://www.rkmt.cn/news/181501.html

相关文章:

  • 成膜助剂生产厂家哪家好?成膜助剂源头工厂在哪里?成膜助剂质量好的厂家推荐 - 品牌2026
  • 理解分布式事务TC\TM\RM
  • 不用反复切号、不用守点熬夜!小红书多号运营的轻松玩法
  • Java 环境变量中 bin 与 lib 的由来
  • CentOS-Stream-10 搭建FTP服务器之虚拟用户访问(一)
  • 日语二类动词如何变化
  • JupyterLab远程开发配置:Miniconda-Python3.9镜像实操记录
  • HTML可视化调试利器:Miniconda-Python3.9集成Plotly开发实战
  • Anaconda配置PyTorch环境变量的正确姿势
  • Anaconda配置PyTorch时出现UnsatisfiableError怎么办?
  • ASP.NET Core 中 IHostedService 构造函数未被调用的排查与解决
  • Miniconda-Python3.9镜像如何提升你的AI开发效率?
  • 清华源加速pip安装!Miniconda-Python3.9镜像配置国内源教程
  • Conda create虚拟环境命名规范与最佳实践
  • Markdown文档编写+代码执行:Miniconda-Jupyter一体化工作流
  • 2025 MBA必备!10个AI论文软件测评:开题报告写作全攻略
  • 成人无人机技能培训服务哪家可靠?口碑好的成人无人机技能培训哪家强? - 工业设备
  • 2026年厂房管道安装工程承包商推荐:五家专业公司综合对比与选择指南 - 品牌2025
  • 一般通过什么软件收集、分析和可视化数据?
  • 国产镀层测厚仪靠谱生产厂家,常见品牌有哪些推荐? - 品牌推荐大师
  • 融合CBMA注意力机制的TCN-SVM故障诊断模型,江南大学、西储大学轴承数据为例---MATLAB代码
  • 厂房恒温恒湿工程设计施工一体化承包推荐:2026年优质选择指南 - 品牌2025
  • 2026年精密制造厂房恒温恒湿工程,专业团队如何选择? - 品牌2025
  • 吃透Java反射(面试必看)
  • HTML动态图表展示:Miniconda环境下使用Bokeh实战
  • 漏洞挖掘指南:小白进阶实战「数字侦探」,月入 3 万核心技能全解析
  • 元旦福利变现指南,永辉超市购物卡高效回收攻略 - 京顺回收
  • X1500型双轴撕碎机结构设计
  • 实用程序:Python打造进程网络监控与分析工具——全方位掌握你的网络与进程状态
  • 2025年成都靠谱西餐培训学校排行榜,新测评精选学做西餐培训学校推荐 - myqiye