C++栈的初始化,入栈,出栈,获取栈顶元素等操作
栈的一些性质:
1.栈为空不可以出栈
2.栈顶元素先出
3.新元素插入栈顶
栈的初始化:
#include<iostream>
#include<string>
using namespace std;
template <class Type> //模板,表示可以"动态"定义Stack中某些数据元素的类型,这样的话可以增加代码的重用性class Stack{ private:Type *urls; //定义指向整型的指针,从而动态开辟内存int max_size,top_index; //max_size表示栈的最大容量,top_index指向栈顶元素public:Stack(int length_input){ //构造函数urls = new Type [length_input]; //动态开辟内存max_size = length_input; //为max_size赋值,表示栈的最大容量top_index = -1; //一开始栈为空,栈顶指针赋值为-1 }~Stack(){delete [] urls; //析构函数,删除动态开辟的内存}
};
int main() {int n;cin >> n;Stack <string> stack (n); //声明一个string类的栈,栈的最大容量为nreturn 0;
}
入栈,出栈以及获取栈顶元素:
#include<iostream>
#include<string>
using namespace std;
template <class Type> //模板,表示可以"动态"定义Stack中某些数据元素的类型,这样的话可以增加代码的重用性class Stack{private:Type *urls; //定义指向整型的指针,从而动态开辟内存int max_size,top_index; //max_size表示栈的最大容量,top_index指向栈顶元素public:Stack(int length_input){ //构造函数urls = new Type [length_input]; //动态开辟内存max_size = length_input; //为max_size赋值,表示栈的最大容量top_index = -1; //一开始栈为空,栈顶指针赋值为-1}~Stack(){delete [] urls; //析构函数,删除动态开辟的内存}bool push(const Type &element){ //为了节省内存,则直接使用引用操作,引用即为变量的别名if(top_index >= max_size-1){ //栈满,入栈失败return false;}++top_index; //栈顶指针上移urls[top_index] = element;return true;}bool pop(){ if(top_index < 0){ //栈空,出栈失败return false;}--top_index; //栈顶指针下移return true;}Type top(){assert(top_index >= 0); //断言操作,不满足括号内条件时,则程序终止return urls[top_index];}
};
int main() {int n, m;cin >> n >> m;Stack<string> stack(n);for(int i = 1;i <= m;i++){ //总共执行m次操作,为了方便,我们这里假设当opr == 0时,执行插入操作;当opr == 1时,执行出栈操作;//当opr == 2时,执行获取栈顶元素操作。int opr;cin >> opr;if(opr==0){string element;cin >> element;if(stack.push(element)){cout << "push success!" << endl;}else{cout << "push failed!" << endl;}}else if(opr == 1){if (stack.pop()) {cout << "pop success!" << endl;} else {cout << "pop failed!" << endl;}}else if (opr == 2) {cout << stack.top() << endl;}}return 0;
}
运行示例:
如有错误,还请指正,O(∩_∩)O谢谢
C++栈的初始化,入栈,出栈,获取栈顶元素等操作相关推荐
- 栈的初始化,入栈,出栈,遍历操作(代码实现) [数据结构][Java]
栈的初始化,入栈,出栈,遍历操作(代码实现) 具体代码如下: package com.ffyc.stack;/*** 创建一个栈结构(使用数组实现)*/ public class ArrayStack ...
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 算法笔记--简单实现栈的先入后出(FILO,First In Last Out)功能
算法笔记–简单实现栈的先入后出(FILO,First In Last Out)功能 stack 栈,是一个 先入后出(FILO,First In Last Out)的 有序列表,可以形象地理解为手枪的 ...
- python 栈的压入弹出序列
| 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...
- [九度][何海涛] 栈的压入压出
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 数据结构与算法--举例分析法- 栈的压入弹出序列
举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...
目前,处在学习数据结构+ing,由于之前学过了队列,今天就把自己写过的代码做了一些完善分享给大家,希望能够帮助到有需要的朋友,有不足的地方欢迎大家交流 φ(゜▽゜*)♪ 队列是另一种限定性的线性 ...
- c语言while队列不为空,C语言实现循环队列的初始化进队出队读取队头元素判空-2...
/*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include #include #define Queue_Size 50 //队列的最大长度 #define OK 1 #d ...
最新文章
- 波士顿动力机器人齐秀舞姿,这是要成团出道?
- win2000堆的调试
- 【ORACLE 高可用】 作业 :配置ORACLE GoldenGate 1
- 二分查找法的实现和应用汇总
- SpringBoot 中 @RequestBody的正确使用方法
- java inireader_java读取配置文件 Java中如何设置读取ini配置文件?
- Oracle18C RPM安装介绍
- 记录一下----关于设计模式和面向对象设计原则
- Java反射异常处理之InvocationTargetException
- 08 域控 架构主机 转移_win2000域控迁移至win2008
- 【学习总结匈牙利算法到KM算法】
- Python 玩转数据 19 - 数据操作 正则表达式 Regular Expressions 搜索模式匹配
- 利用条形码生成器在Word 2013中轻松制作条形码的方法
- 特网云服务器 WindowsServer2012 关闭IE增强机制
- python 可视化案例_Python之路 08 数据可视化案例
- 联邦学习实战-2-用FATE从零实现横向逻辑回归
- PAT 1026 Table Tennis (30分)
- 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案 (部分)
- java pdf 报表_关于Java向PDF模板写入数据,以及java制作pdf报表的问题
- 使用SaveFileDialog将DataTable文件保存成csv文件