C++实现栈
来源:互联网 发布:python json库 编辑:程序博客网 时间:2024/06/08 14:50
1.栈
定义:栈是只允许末端进行插入和删除的线性表,具有先进后出或先进后出的特性
栈用数组实现较好,因为它只在尾上进行操作,进行增删比较方便。
1.栈
<span style="font-family:Microsoft YaHei;font-size:18px;">#pragma once//栈具有后进先出的原则,template<class T>class Stack{public://构造函数Stack():_a(NULL), _top(0), _capcity(0){}//析构函数~Stack(){Clear();}//pushvoid PushBack(const T& x){//1.先检查容量 2.向数据中插入新数据 3.++_topCheckCapcity();_a[_top++] = x;}//popvoid PopBack(){if (_top == 0){cout << "NULL" << endl;;return; //记得加这句,不然停不下来,越界访问,有bug}else--_top;}//sizeint Size(){return _top;}//emptybool Empty(){return _top == 0;}//topT& Top(){return _a[_top-1];}void Print(){for (int i = 0; i < _top; i++){cout << _a[i] << " ";}cout << endl;}protected:void CheckCapcity(){if (_top == _capcity){//扩充的是_capcity,所以只改变_capcity,其他的不用动_capcity = _capcity * 2 + 3;T* tmp = new T[_capcity]; //重新开辟空间for (int i = 0; i < _top; i++){tmp[i] = _a[i]; //将数据都拷贝到新空间中}delete[] _a; //释放原空间,_a = tmp; //然后指针重新指向新空间}}void Clear(){if (_a!=NULL){delete[] _a;_top = 0;_capcity = 0;}}protected:T* _a; //栈底层封装数组,利用数组实现栈,这样做就可以限制只在尾上做处理size_t _top;//指向最上面的元素,相当关于以前数组的的sizesize_t _capcity;//当前栈的总容量};</span>
测试用例:
<span style="font-family:Microsoft YaHei;font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;#include"Stack.h"//Test Pushvoid Test1(){Stack<int> s1;s1.Push(1);s1.Push(2);s1.Push(3);s1.Push(4);s1.Push(5);while (!s1.Empty()){cout << s1.Top() << endl;s1.Pop();}}//Test Popvoid Test2(){Stack<int> s1;s1.Push(1);s1.Push(2);s1.Push(3);s1.Push(4);s1.Push(5);s1.Pop();s1.Pop();s1.Pop();s1.Pop();s1.Pop();s1.Pop();s1.Pop();while (!s1.Empty()){cout << s1.Top() << endl;s1.Pop();}}//Test size()void Test3(){Stack<int> s1;s1.Push(1);cout << s1.size() << endl;s1.Push(2);cout << s1.size() << endl;s1.Push(3);cout << s1.size() << endl;s1.Push(4);cout << s1.size() << endl;s1.Push(5);cout << s1.size() << endl;}//test emptyvoid Test4(){Stack<int> s1;s1.Push(1);s1.Push(2);s1.Pop();s1.Pop();cout << s1.Empty() << endl;}//testvoid Test5(){Stack<int> s1;s1.Push(1);cout<<s1.Top()<<endl;s1.Push(2);cout << s1.Top() << endl;s1.Push(3);cout << s1.Top() << endl;s1.Push(4);cout << s1.Top() << endl;s1.Push(5);cout << s1.Top() << endl;}int main(){//Test1();//Test2();//Test3();//Test4();Test5();system("pause");return 0;}</span>
如有不正确的地方,希望能够指出,一起学习,谢谢了。
1 0
- c实现顺序栈
- C实现链式栈
- 栈C语言实现
- C语言实现栈
- 栈的C实现
- c实现顺序栈
- C语言实现栈
- C实现栈
- C语言实现栈
- 栈(c实现)
- C语言实现栈
- C语言实现栈
- 【c++】栈的实现
- C代码实现栈
- C链栈实现
- C链式栈实现
- c语言实现栈
- C语言实现栈
- map的详细用法
- 1-HTML简介(标记、属性)
- Java中与时间相关的几个类(Date、Calendar、SimpleDateFormat)
- 2-链接-meta-表格-表单
- json 反序列化的时候遇到的问题整理
- C++实现栈
- java学习之路之数据库知识总结
- HDOJ 1323 Perfection(简单题)
- textarea如何实现高度自适应
- ArchLinux 扬声器和麦克风不能使用的问题
- php的tips(数组排序函数)
- div模拟textarea文本域轻松实现高度自适应
- UbuntuKylin13.10下安装配置Theano
- jquery ajax无刷新更新页面