栈:一个模板定长数组栈

一个模板定长数组栈

        为了以后方便使用,可以把代码放在Stack.h文件中。

#include<iostream>
using namespace std;
template<class T>
class Stack
{
public:
    Stack(int Size);
    ~Stack();
    bool stack_empty();//判空
    bool stack_full();//判满
    bool push(T element);//入栈
    bool pop(T &element);//出栈
    void stack_clear();//清空栈
    void traverse();//遍历
private:
    T* data;
    int Size;
    int lenght;
    int top;
};

//初始化栈
template<class T>
Stack<T>::Stack(int Size)
{
    this->Size=Size;
    data=new T[Size];
    lenght=0;
    top=0;
}

//销毁栈
template<class T>
Stack<T>::~Stack()
{
    delete []data;
}

//判空
template<class T>
bool Stack<T>::stack_empty()
{
    return top==0?true:false;
}

//判满
template<class T>
bool Stack<T>::stack_full()
{
    return top==Size?true:false;
}

//入栈
template<class T>
bool Stack<T>::push(T element)
{
    if(stack_full()) return false;
    data[top]=element;
    top++;
    lenght++;
    return true;
}

//出栈
template<class T>
bool Stack<T>::pop(T &element)//传入引用的目的是可以把出栈的元素取出来,相当于取栈首元素
{
    if(stack_empty()) return false;
    top--;
    element=data[top];
    lenght--;
    return true;
}

//清空栈
template<class T>
void Stack<T>::stack_clear()
{
	//将栈的长度清0,栈顶指向0;
    lenght=0;
    top=0;
}

//遍历栈
template<class T>
void Stack<T>::traverse()
{
    for(int i=0;i<top;i++)
        cout<<data[i]<<" ";
    cout<<endl;
}

          可以把上述文件引入主文件中进行操作。
          这是一个简单的小演示

#include <iostream>
#include"Stack.h"
#include<stdlib.h>
using namespace std;

int main()
{
    int Size;//定义栈的长度
    cin>>Size;
    Stack<int> mystack(Size);//在<>中填写栈中元素的数据类型
    int x;
    for(int i=0;i<Size;i++)
    {
        x=rand()%100;//产生一个100以内随机数
        mystack.push(x);//将产生的随机数入栈
    }
    mystack.traverse();//清空栈,未清空前栈内有25个元素,清空后元素为0;
    for(int i=0;i<Size/2;i++)
    {
        mystack.pop(x);//将栈顶元素取出,取出后存入在变量x中,因为传入的参数是引用
        mystack.traverse();//每取出一个元素打印一遍当前栈
    }
    return 0;
}

演示结果如图所示
在这里插入图片描述
关于清空栈的操作:
每一个内存地址中都有值,赋值并不是给没有值的内存赋一个值而是用当前值覆盖以前的值,所以清空栈并不需要更改原来内存的值,只需要更改栈的长度和栈顶,内存中的值可以在后续的操作中覆盖。

猜你喜欢

转载自blog.csdn.net/fan_huhu/article/details/84300448