顺序栈的简单操作

来源:互联网 发布:极限挑战第一季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> &copy);Sqstack<T> &operator =(const Sqstack<T> &copy);};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> &copy){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> &copy){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;}#endif
stacklist.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
原创粉丝点击