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

【c++学习】数据结构中的栈

c++栈

    • 代码
      • 用线性表实现栈
      • 用链表实现栈

栈:先进后出
只对栈顶元素进行操作,包括新元素入栈、栈顶元素出栈和查看栈顶元素(只支持对栈顶的增、删、查)。

代码

下述代码实现了栈及其接口
包括对栈顶的增、删、查以及查看栈的大小

用线性表实现栈

#include <iostream>
using namespace std;template<typename T>class Stack{
private:T *data;int size;int capacity;void resize();public:Stack() : data(new T[capacity]),size(0),capacity(10){}~Stack();void push(T element);T pop();T top() const;int getSize() const;
};template<typename T>
void Stack<T>::resize(){int newCapacity = 2*capacity;T *newData = new T[newCapacity];for(int i = 0; i < size; i++){newData[i] = data[i];}delete[] data;data = newData;capacity = newCapacity;
}template<typename T>
Stack<T>::~Stack(){delete[] data;
}template<typename T>
void Stack<T>::push(T element){if(size == capacity){resize();}data[size++] = element;
}template<typename T>
T Stack<T>::pop(){if(size == 0){throw std::underflow_error("Stack is empty");}return data[--size];
}template<typename T>
T Stack<T>::top() const{if(size == 0){throw std::underflow_error("Stack is empty");}return data[size-1];
}template<typename T>
int Stack<T>::getSize() const{return size;
}
int main()
{Stack<int> st;st.push(1);st.push(2);st.push(3);cout << st.getSize() << endl;cout << st.top() << endl;st.pop();cout << st.getSize() << endl;cout << st.top() << endl;	return 0;
}

用链表实现栈

#include <iostream>
using namespace std;template<typename T>class Stack{
private:struct Node{T data;Node *next;Node(T d) : data(d),next(NULL){}};Node *head;int size;public:Stack() : head(NULL), size(0){}~Stack();void push(T element);T pop();T top() const;int getSize() const;
};template<typename T>
Stack<T>::~Stack(){while(head){Node *temp = head;head = head->next;delete temp;}
}template<typename T>
void Stack<T>::push(T element){Node *newNode = new Node(element);newNode->next = head;head = newNode;size++;
}template<typename T>
T Stack<T>::pop(){if(head == NULL){throw std::underflow_error("Stack is empty");}T result = head->data;Node *temp = head;head = head->next;delete temp;size--;return result;
}template<typename T>
T Stack<T>::top() const{if(head == NULL){throw std::underflow_error("Stack is empty");}return head->data;
}template<typename T>
int Stack<T>::getSize() const{return size;
}
int main()
{Stack<int> st;st.push(1);st.push(2);st.push(3);cout << st.getSize() << endl;cout << st.top() << endl;st.pop();cout << st.getSize() << endl;cout << st.top() << endl;	}

于 2024-01-26 第一次整理编写

学习时整理,不当之处烦请指正
码字不易,留个赞再走吧

http://www.lryc.cn/news/288545.html

相关文章:

  • 新建react项目,react-router-dom配置路由,引入antd
  • Transformer and Pretrain Language Models3-6
  • Linux系统中编写bash脚本进行mysql的数据同步
  • 光耦驱动继电器电路图大全
  • 【AI量化分析】小明在量化中使用交叉验证原理深度分析解读
  • 2024最新版Visual Studio Code安装使用指南
  • 接口请求重试八种方法
  • 【Linux 基础】常用基础指令(上)
  • 【RT-DETR有效改进】EfficientFormerV2移动设备优化的视觉网络(附对比试验效果图)
  • 《动手学深度学习(PyTorch版)》笔记4.4
  • Linux/Academy
  • windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等
  • uniapp canvas做的刮刮乐解决蒙层能自定义图片
  • 利用SPI,结合数据库连接池durid进行数据服务架构灵活设计
  • 自动驾驶的决策层逻辑
  • 排序算法——希尔排序算法详解
  • Docker 容器内运行 mysqldump 命令来导出 MySQL 数据库,自动化备份
  • 【Java万花筒】数字信号魔法:Java库的魅力解析
  • 面试高频知识点:2线程 2.1 线程池 2.1.2 JDK中常见的线程池实现有哪些?
  • Azure Private endpoint DNS 记录是如何解析的
  • windows 安装sql server 华为云文档
  • 相同主题文章竟同时发表在同一个2区期刊 | 孟德尔随机化周报(1.10-1.16)
  • 网络安全的使命:守护数字世界的稳定和信任
  • 【七、centos要停止维护了,我选择Almalinux】
  • 架构师之路(十六)计算机网络(传输层)
  • python 调用SumatraPDF 静默打印PDF
  • nginx部署https域名ssl证书
  • Python学习之路-Django基础:HelloDjango
  • 完成NAT实验
  • uniapp 用web-view嵌套网页地址并传参