您的位置:首页 > 其它

关于堆栈的一些认识

2016-05-05 21:10 330 查看
特别注意:堆栈是一种先进后出(FILO)的数据类型,最后入栈的数据存放在编号为top-1的地址单元,也就是说,编号为top-1的地址单元存放的是最后入栈的数据,编号为top的单元永远都不会存数据。

#include <iostream>
#include <string>
#include "stack.h"

/*****
* 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1,数据放在编号为0的地址单元,以此类推,当堆栈满时,size=top
* 因此:数据入栈时,先是将数据放到编号为top的单元(编号从0开始),然后top自加1
*       数据出栈时,现将top自减1,然后数据出栈。编号为top的地址单元始终都没有数据
****/
Stack::Stack(int n)
{
size = n;
pitems = new Item [size];
top = 0;
}

Stack::Stack(const Stack &st)  //复制构造函数
{
pitems = new Item[st.size];
size = st.size;
top = 0;
for(int i=0;i<st.top;i++)
{
pitems[i] = st.pitems[i];
//	size++;
top++;
}
}

Stack::~Stack()
{
delete [] pitems;
}
//空代表没有初始化堆栈,top=0
bool Stack::isempty() const
{
return (top ? false:true);
}

//堆栈满表示:top=size
bool Stack::isfull() const
{
return (top == size)? true:false;
}

bool Stack::push(const Item & item)
{
if(top == size)
return false;
else
{
pitems[top] = item;
top = top+1;
return true;
}
}

bool Stack::pop(Item & item)
{
if(top == 0)
return false;
else
{
top--;
item = pitems[top];
return true;
}
}

Stack & Stack::operator=(const Stack & st)  //深度赋值
{
if(this == & st)   //& 取地址
return *this;
else
{
delete [] pitems;
pitems = new Item [st.size];
size = 0;
top = 0;
for(int i=0;i<st.size;i++)
{
pitems[i] = st.pitems[i];
size++;
top++;
}
return *this;
}
}

std::ostream & operator<<(std::ostream & os, const Stack & st)
{
for(int i=0;i<st.top;i++)
{
os << st.pitems[i] << "\n";
}
return os;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: