3.3 入栈、出栈链表的数据插入方案有头部插入和尾部插入两种方案 。在模拟栈时须保证数据的维护只能在一端进行,可以有 2 种方案:
- 数据的插入和删除在头部进行 。
- 数据的插入和删除在尾部进行 。
3.3.1 入栈链式栈不需要考虑栈是已经满的问题 。入栈实现流程:
- 创建一个新结点对象 。
- 原来的头结点成为新结点的后驱结点 。
- 新结点成为头结点 。
//出栈T pop() { Node<T> * node=NULL; T data; if(this->head){ //获取头结点 node=this->head; //得到数据 data=https://www.huyubaike.com/biancheng/node->data; //原来头结点的后驱成为新头结点 this->head=this->head->next; //删除结点 delete node; this->size--; return data; }else{ //链表为空 return NULL; }}为了方便查询栈顶数据,需要提供一个查询栈顶数据的操作 。
//查看栈顶数据T getTop() { if(this->head) { return this->head->data; } else { return NULL; }}3.3.3 测试链式栈int main(int argc, char** argv) { Stack<int> stack ; //入栈 for(int i=0; i<10; i++) {stack.push(i); } cout<<"栈中实际数据大小:"<<stack.getSize()<<endl; cout<<"查询栈顶数据:"<<stack.getTop()<<endl; //出栈 for(int i=0; i<10; i++) {cout<<stack.pop()<<endl; } return 0;}执行结果:
文章插图
4. STL 中的栈实际应用时,可以使用STL的stack容器 。除了上述的基本操作外,stack容器还提供比较操作,这些操作可以被用于栈与栈之间的比较, 相等指栈有相同的元素并有着相同的顺序 。
#include <iostream>#include <stack>using namespace std;int main(int argc, char** argv) { stack<int> myStack; //入栈 for(int i=0;i<5;i++){myStack.push(i); } cout<<"栈中数据大小:"<<myStack.size()<<endl; //出栈 for(int i=0;i<4;i++) {cout<<"栈顶数据:"<<myStack.top()<<endl;myStack.pop(); } cout<<"栈顶数据:"<<myStack.top()<<endl; stack<int> myStack_; myStack_.push(0); bool res= myStack_==myStack; cout<<"比较结果:"<<res<<endl; return 0;}
经验总结扩展阅读
- 免疫力失衡怎么调理
- 湿法和干法的区别
- 概率和概率单位的区别是什么啊
- vivoX70pro和苹果11区别对比_哪款更值得入手
- 小米10s和小米10拍照哪个好_小米10s和小米10拍照对比
- 射手座的缺点和优点
- vivox70pro+和小米11Ultra那个好_详细对比
- 醇和浓硫酸共热是什么反应
- 表柔比星和多柔比星的区别
- 蒸饺怎么和面好窍门