栈的c++实现

来源:互联网 发布:安居客经纪人网络平台 编辑:程序博客网 时间:2024/06/05 02:13

一 固定大小的栈

代码如下

////  stack.h//  stack//#ifndef __stack__stack__#define __stack__stack__#include <stdio.h>template <class Type>class Stack{private:    enum {MAX = 10};    Type items[MAX];    int top;public:    Stack();    bool isempty();    bool isfull();    bool push(const Type & item);    bool pop(Type &item);};template <class Type>Stack<Type> ::Stack(){    top = 0;}template <class Type>bool Stack<Type>::isempty(){    return top == 0;}template <class Type>bool Stack<Type>::isfull(){    return top == MAX;}template <class Type>bool Stack<Type>::push(const Type & item){    if (top < MAX)    {        items[top++] = item;        return true;    }    else        return false;}template <class Type>bool Stack<Type>::pop(Type & item){    if (top > 0)    {        item = items[--top];        return true;    }    else        return false;}#endif /* defined(__stack__stack__) */

二 大小可变的栈

代码如下

#ifndef __stack__stcktp1__#define __stack__stcktp1__#include <stdio.h>template <class Type>class Stack {private:    enum {SIZE = 10};    int stacksize;    Type * items;    int top;public:    explicit Stack(int ss = SIZE);    Stack(const Stack & st);    ~Stack() {delete [] items;}    bool isempty() {return top == 0;}    bool isfull() {return top == stacksize;}    bool push(const Type & item);    bool pop(Type & item);    Stack & operator=(const Stack & st);};template <class Type>Stack<Type> ::Stack(int ss):stacksize(ss),top(0){    items = new Type[stacksize];}template <class Type>Stack<Type> ::Stack(const Stack & st){    stacksize = st.stacksize;    top = st.top;    items = new Type[stacksize];    for (int i = 0; i < top; i++)    {        items[i] = st.items[i];    }}template <class Type>bool Stack<Type>::push(const Type & item){    if (top < stacksize)    {        items[top++] = item;        return true;    }    else        return false;}template <class Type>bool Stack<Type>::pop(Type &item){    if (top > 0)    {        item = items[--top];        return true;    }    else        return false;}template<class Type>Stack<Type> & Stack<Type>::operator=(const Stack<Type> &st){    if (this == &st)    {        return *this;    }    delete []items;    stacksize = st.stacksize;    top = st.top;    items = new Type[stacksize];    for(int i = 0;i < top;i++)    {        items[i] = st.items[i];    }    return *this;}#endif /* defined(__stack__stcktp1__) */



0 0
原创粉丝点击