您的位置:首页 > 其它

堆栈的定义和实现

2017-08-08 15:52 141 查看
**

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

**



代码实现:

/*
数据结构:stack (数组实现)
功能:push  // 进栈          void push (const Type& val);
pop   //出栈          void pop();
top   //返回栈顶元素    const_reference& top() const;
size  //返回栈大小      size_type size() const;
empty //判断栈是否为空   bool empty() const;
/*********附加功能(未实现)**********//*
emplace //在堆栈的顶部添加一个新元素(类似push,但避免了构造临时对象)
swap    //交换容器内容
*/

#include <iostream>
#include <cstdlib>

template <typename Type>
class Stack
{
public:
Stack()
{

S=new Type[MAX_Stack];
Size=-1;
Push=0;
Pop=0;
//    std::cout<<"栈已构造完毕"<<std::endl;
}

~Stack()
{
delete[] S;
//    std::cout<<"栈已析构"<<std::endl;
}

void push(const Type& val)
{
if(Size<MAX_Stack-1)
S[++Size]=val;
else
{
upstepStack();
push(val);
}
}

void pop()
{
if(!empty())
{
std::cout<<"栈为空强制退出"<<std::endl;
exit(0);
}
else
Size--;
}

Type& top()const
{
if(!empty())
{
std::cout<<"栈为空强制退出"<<std::endl;
exit(0);
}
else
return S[Size];
}

int size() const
{
return Size;
}

bool empty() const
{
if(Size==-1)
return false;
else
return true;
}

void upstepStack()
{
Type *temp = S;
MAX_Stack+=increment;
S = new Type[MAX_Stack];
for(int i = 0;i<Size;i++)
S[i] = temp[i];
delete[] temp;
}

private:
Type *S;
int Size;
int Push;
int Pop;
int MAX_Stack=50;
const int increment=20;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: