您的位置:首页 > 编程语言 > C语言/C++

C++实现顺序栈类

2012-10-24 16:17 357 查看
  堆栈(英文:stack),也可直接称栈。在计算机科学中,栈是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。

  另外堆栈也可以用一维阵列或连结串行的形式来完成。

  由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

  堆栈数据结构使用两种基本操作:推入(push)和弹出(pop)。

源文件以及测试代码

#include "sq_stack.h"
#include <iostream>

using namespace std;

template <class DataType>
sq_stack<DataType>::sq_stack()
{
base = new DataType[STACK_INIT_SIZE];
if(!base) exit(1);
top=base;
stacksize=STACK_INIT_SIZE;
}

template <class DataType>
void sq_stack<DataType>::Push(DataType e)
{
if(top-base>=stacksize-1){
base=(DataType*)realloc(base,(stacksize+STACKINCREMENT)*sizeof(DataType));
if(!base) exit(1);
top=base+stacksize-1;
stacksize+=STACKINCREMENT;
}
*top++=e;
}

template <class DataType>
void sq_stack<DataType>::Pop()
{
if(top==base) exit(1);
top--;
}

template <class DataType>
DataType sq_stack<DataType>::Top()
{
if(top==base) return NULL;
return *(top-1);
}

template <class DataType>
bool sq_stack<DataType>::Empty()
{
return top==base? 1:0;
}

template <class DataType>
sq_stack<DataType>::~sq_stack()
{
if(base) free(base);
top = base = NULL;
stacksize = 0;
}

int main()
{
sq_stack<int> st;
for(int i=1;i<=20;i++)
st.Push(i);
for(int i=1;i<=20;i++)
{
cout<<st.Top()<<" ";
st.Pop();
if (i%5 == 0){cout<<endl;}
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: