当前位置: 首页 > 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.jsqmd.com/news/165977/

相关文章:

  • Jupyter Notebook主题美化:安装jupyter-themes
  • CUDA版本与PyTorch对应关系表(Miniconda安装参考)
  • CUDA安装多版本共存管理技巧(配合Miniconda)
  • 2025防疫物资回收优选榜:一站式服务谁最强?防疫物资回收/防护服回收/隔离衣回收,防疫物资回收企业找哪家 - 品牌推荐师
  • 成膜助剂生产厂家哪家好?成膜助剂源头工厂在哪里?成膜助剂质量好的厂家推荐 - 品牌2026
  • PyTorch安装离线包方法(适合无外网Miniconda环境)
  • 理解分布式事务TC\TM\RM
  • 过碳酸钠生产厂家哪家好?质量好的过碳酸钠厂家TOP榜单盘点 - 品牌2026
  • 2026 GEO行业趋势预判:五大值得关注的发展方向
  • 2026北京房山区抵押担保律师事务所口碑排名:权威测评5家靠谱机构 - 苏木2025
  • 不用反复切号、不用守点熬夜!小红书多号运营的轻松玩法
  • Markdown生成静态网站:使用MkDocs+Miniconda
  • Miniconda-Python3.9更新conda自身版本的方法
  • Java 环境变量中 bin 与 lib 的由来
  • 耐达讯自动化PROFIBUS三路中继器:突破工业通信距离与干扰限制的利器
  • 第六届“强网杯”全国网络安全挑战赛-青少年专项赛
  • 成膜助剂供应商、成膜助剂厂家、成膜助剂供货商名单精选,top10榜单 - 品牌2026
  • 深入Kali Linux 2网页渗透测试:从入门到实战精通
  • 过碳酸钠出口厂商有哪些?有出口资质的过碳酸钠供应商、外贸公司推荐名单 - 品牌2026
  • 日语二类动词如何变化
  • 【论文精读】你的遗留系统正在耗尽预算:关于软件现代化,你必须知道的10个挑战
  • JupyterLab远程开发配置:Miniconda-Python3.9镜像实操记录
  • 陕西发泡陶瓷厂家盘点2025版:技术评价与推荐理由 - 深度智识库
  • BUUCTF | Web [极客大挑战 2019]EasySQL-- BUUOJ WriteUP
  • 潜孔冲击器推荐厂家哪家好?优选潜孔钻头钻杆及钻机配件推荐品牌腾达钻孔 - 品牌推荐大师1
  • 2026最新污水药剂厂家精选:蓝淼环保——西南地区洗砂药剂、絮凝剂、PAM一站式解决方案专家 - 深度智识库
  • 2025创作复盘:以文字迭代沉淀成长,用技术化分享构建同行连接链路
  • 天源中芯TP9311:为AI智能时代精心打造的高清音频感知芯片
  • Linux服务器上部署Miniconda-Python3.9用于批量AI任务处理
  • 2025水处理药剂优选指南:蓝淼环保——污水药剂与PAM领域的实力担当 - 深度智识库