顺序栈的简单操作
来源:互联网 发布:极限挑战第一季6 知乎 编辑:程序博客网 时间:2024/05/16 17:22
今天简单的实现了一下顺序栈,栈的核心函数是push(),top(),pop()。首先是我自己编写的栈,后面是STL标准库调用栈函数。
sqstack.h
//栈的简单实现lifo#ifndef SQSTACK_H_#define SQSTACK_H_const int DEFAULT_SIZE=10;#include <iostream>using std::cout;using std::endl;template <typename T>class Sqstack{protected:int count;int maxSize;T *elem;//辅助void Init(int size);bool Full();public:Sqstack(int size=DEFAULT_SIZE);virtual ~Sqstack();void Clear();int Length() const;bool IsEmpty();//void GetElem(int position, T &e);//Sqstack<T> &InsertElem(int position, T &e);//Sqstack<T> &DeleteElem(int position, T e);//Sqstack<T> &SetElem(int position, T &e);T top();void push(const T e);T pop();Sqstack(const Sqstack<T> ©);Sqstack<T> &operator =(const Sqstack<T> ©);};template<typename T>void Sqstack<T>::Init(int size){maxSize=size;if(elem!=NULL){Clear();}elem=new T[maxSize];count=0;}template <typename T>bool Sqstack<T>::Full(){return Length()==maxSize;}template<typename T>Sqstack<T>::Sqstack(int size){elem=NULL;Init(size);}template <typename T>Sqstack<T>::~Sqstack(){Clear();delete []elem;}template <typename T>void Sqstack<T>::Clear(){count=0;}template <typename T>int Sqstack<T>::Length() const{return count;}template <typename T>bool Sqstack<T>::IsEmpty(){return count==0;}template <typename T>T Sqstack<T>::top(){if(IsEmpty()){return NULL;}elsereturn elem[count-1];}template <typename T>void Sqstack<T>::push(const T e){if(Full()){cout<<"栈已满,无法压栈!"<<endl;}else{elem[count++]=e;}}template <typename T>T Sqstack<T>::pop(){if(IsEmpty()){cout<<"栈为空,弹不出来!";return -1;}else{T e;e=elem[count-1];--count;return e;}}template <typename T>Sqstack<T>::Sqstack(const Sqstack<T> ©){Init(copy.maxSize);for(int curPosition=0; curPosition<copy.count; curPosition++){elem[curPosition]=copy.elem[curPosition];count++;}}template <typename T>Sqstack<T> &Sqstack<T>::operator =(const Sqstack<T> ©){if(this!=copy){Init(copy.maxSize);for(int curPosition=0; curPosition<copy.count; curPosition++){elem[curPosition]=copy.elem[curPosition];count++;}}}template <typename T>std::ostream &operator<<(std::ostream &os, Sqstack<T> &Stack){int Len=Stack.Length();for(int curPosition=0; curPosition<Len; curPosition++){cout<<Stack.pop()<<" ";}cout<<endl;return os;}#endifstacklist.cpp
// Stacklist.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "sqstack.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){Sqstack<int> Stack;Stack.push(1);Stack.push(2);Stack.push(3);int a=Stack.top();cout<<"取栈顶值为:"<<a<<endl;//int e=Stack.pop();//cout<<"弹出值为:"<<e<<endl;//cout<<Stack;Sqstack<int> copy(Stack);Sqstack<int> copy1=copy;cout<<"倒叙输出栈:"<<copy;cout<<"倒叙输出栈:"<<copy1;system("pause");return 0;}
接下来是调用STL标准库中的STACK实现:
// stack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <stack>using namespace std;int _tmain(int argc, _TCHAR* argv[]){stack<int> s1;for(int i=0; i<5; i++){s1.push(i);}cout<<"s1.top is: "<<s1.top()<<endl;cout<<"倒叙输出为:";while(s1.size()){cout<<s1.top()<<" ";s1.pop();//无返回值,仅仅是弹出数据}cout<<endl;system("pause");return 0;}结果略。
0 0
- 顺序栈的简单操作
- 顺序栈的简单操作
- 顺序栈的简单操作
- 顺序栈的简单操作
- 顺序栈--简单操作
- 【数据结构】 简单静态顺序栈的操作
- 顺序表的简单操作
- 顺序表的简单操作
- 栈的简单操作(顺序结构存储)
- 顺序表的简单操作(数据结构)
- 线性顺序表的简单操作
- C语言 简单的 顺序表操作
- 顺序栈的操作
- 顺序栈的操作
- 顺序栈的操作
- 顺序栈的操作
- 顺序栈的操作
- 顺序栈的操作
- 设置vim的键盘映射
- 淘宝面试题--大表建约束
- Hibernate映射
- 端午节的作文300字:难忘的端午节
- Maven组织的web项目读取WEB-INF下properties文件
- 顺序栈的简单操作
- HDU--2016
- Android问题集锦之四十:Android NDK: Could not find application project directory
- Java 8 详解之默认方法
- [LeetCode] Combination Sum III
- Harris角点检测及代码分析(续)
- 轮廓处理之三
- 使用cocos2d-x制作 Texture unpacker
- 集合Map