C++栈的用法及栈的实现
来源:互联网 发布:谷歌人工智能开放平台 编辑:程序博客网 时间:2024/06/03 16:15
- 首先看一下原c++栈的方法的基本用法:
- push(): 向栈内压入一个成员;
- pop(): 从栈顶弹出一个成员;
- empty(): 如果栈为空返回true,否则返回false;
- top(): 返回栈顶,但不删除成员;
- size(): 返回栈内元素的大小;
- 代码示例:
#include<iostream>#include<stack>using namespace std;int main(){ stack <int>stk; //入栈 for(int i=0;i<50;i++){ stk.push(i); } cout<<"栈的大小:"<<stk.size()<<endl; while(!stk.empty()) { cout<<stk.top()<<endl; stk.pop(); } cout<<"栈的大小:"<<stk.size()<<endl; return 0;}
- 接下来我们自己写栈,这时就需要用到c++中的模板类(template)
#include<iostream>#include<stdlib.h>using namespace std;#define MAXSIZE 0xfffftemplate<class type>class my_stack{ int top; type* my_s; int maxsize;public: my_stack():top(-1),maxsize(MAXSIZE) { my_s=new type[maxsize]; if(my_s==NULL) { cerr<<"动态存储分配失败!"<<endl; exit(1); } } my_stack(int size):top(-1),maxsize(size) { my_s=new type[maxsize]; if(my_s==NULL) { cerr<<"动态存储分配失败!"<<endl; exit(1); } } ~my_stack() { delete[] my_s; } //是否为空 bool Empty(); //压栈 void Push(type tp); //返回栈顶元素 type Top(); //出栈 void Pop(); //栈大小 int Size();};template<class type>bool my_stack<type>::Empty(){ if(top==-1){ return true; } else return false;}template<class type>type my_stack<type>::Top(){ if(top!=-1) { return my_s[top]; } else { cout<<"栈空\n"; exit(1); }}template<class type>void my_stack<type>::Push(type tp){ if(top+1<maxsize) { my_s[++top]=tp; } else { cout<<"栈满\n"; exit(1); }}template<class type>void my_stack<type>::Pop(){ if(top>=0) { top--; } else { cout<<"栈空\n"; exit(1); }}template<class type>int my_stack<type>::Size(){ return top+1;}
- 然后就可以在另一个cpp文件中使用它了(记得include):
#include<iostream>#include "my_stack.cpp"using namespace std;int main(){ my_stack<int> stk; for(int i=0;i<50;i++){ stk.Push(i); } cout<<"栈的大小:"<<stk.Size()<<endl; while(!stk.Empty()) { cout<<stk.Top()<<endl; stk.Pop(); } cout<<"栈的大小:"<<sizeof(stk)<<endl; return 0;}
- 在编写代码的时候我突然很好奇,size()和sizeof输出的区别,然后我用我写的栈做了尝试:
#include<iostream>#include<stack>#include "my_stack.cpp"using namespace std;int main(){ my_stack<int> stk; stack<int> s; for(int i=0;i<20;i++){ stk.Push(i); s.push(i); } cout<<"mysize()="<<stk.Size()<<"\nmysizeof="<<sizeof(stk)<<endl; cout<<"size()="<<s.size()<<"\nsizeof="<<sizeof(s)<<endl; return 0;}输出:mysize()=20mysizeof=12size()=20sizeof=40
并且可以看到我写的栈类的变量只有三个整型(一个template型),刚好12个字节,由此可知c++提供的栈内不止我写的这么简单,光变量就占40个字节
5 0
- strcpy的用法、c语言实现、及注意点
- C++栈的用法及栈的实现
- C++栈的用法及栈的实现
- memmove的用法及实现
- 动态栈的存储结构及算法C语言实现
- C语言数据结构----栈的定义及实现
- 数据结构:栈的顺序结构及实现(C++)
- 栈的链式存储结构及C实现
- 【C语言】递归实现栈的逆序及排序
- 栈的C语言实现及相关知识点总结
- memcpy的用法与strcpy的区别及纯c语言实现
- C语言extern的用法及作用
- C++sort()函数的用法 及学习
- C语言 continue的用法及注意事项
- C中->和*.的区别及用法
- 学习笔记——atoi函数的用法及用C语言实现atoi
- 学习笔记——atoi函数的用法及用C语言实现atoi
- 学习笔记——atoi函数的用法及用C语言实现atoi
- selenium错误"element not visible"问题
- centos6中yum的安装
- android新浪微博登录获取用户信息
- ROS学习笔记(一):自己动手写一个ROS程序
- IT故事:磁盘加密工具TrueCrypt与“棱镜门”事件
- C++栈的用法及栈的实现
- 解决UICollectionView ReloadData闪一下(隐式动画)
- Android开发-CheckedTextView复选框自定义样式-AndroidStudio
- FrameBuffer
- java并发包concurrent
- IDLE's subprocess didn't make connection的解决办法--转自鱼c论坛
- AndroidStudio2.2开发NDK的正确姿势
- vs2013 控制台程序弹出窗口程序MessageBox(NULL, "haha", "hehe", MB_OK);
- 快速下载maven依赖