栈的顺序存储结构

  • 格式:doc
  • 大小:217.55 KB
  • 文档页数:14

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

填写图片摘要(选填)

c++模板类实现 栈的数组存储结构:

template

struct Stack{

int top;

T *ele;

};

实现的类:

填写图片摘要(选填)

具体函数的实现:

template

Mystack::Mystack() //构造函数

{ s = new Stack;

s->ele = new T[Max];

}

template

Mystack::~Mystack() //析构函数

{

delete s;

delete []s->ele;

}

template

void Mystack::MakeNull() //栈置空

{

s->top = Max;

}

template bool Mystack::IsEmpty() //判空

{

if(s->top > Max-1)

return true;

else

return false;

}

template //返回当前栈顶元素

T Mystack::GetTopEle()

{

if(IsEmpty())

return NULL;

else

return s->ele[s->top];

} template

void Mystack::Pop() //删除栈顶元素

{

if(IsEmpty())

cout<<"Empty !"<

else s->top=s->top+1;

}

template

void Mystack::Push(T x) //入栈

{

if(s->top==0)

cout<<"Full !"<

else{

s->top--;

s->ele[s->top]=x; }

}

template

void Mystack::DisplayStack() //打印栈

{

cout<<"输出栈:";

int i=s->top;

while(s->ele!=NULL&&i

{

cout<ele[i]<<" ";

i++;

}

cout<

}

main函数的实现: 填写图片摘要(选填)

可运行程序代码:

#include

#define Max 100

using namespace std;

template

struct Stack{

int top;

T *ele; };

template

class Mystack{

public:

Mystack();

~Mystack();

void MakeNull();

bool IsEmpty();

T GetTopEle();

void Pop();

void Push(T);

void DisplayStack();

private:

Stack *s;

}; template

Mystack::Mystack() //构造函数

{

s = new Stack;

s->ele = new T[Max];

}

template

Mystack::~Mystack() //析构函数

{

delete s;

delete []s->ele;

}

template

void Mystack::MakeNull() //栈置空

{ s->top = Max;

}

template

bool Mystack::IsEmpty() //判空

{

if(s->top > Max-1)

return true;

else

return false;

}

template //返回当前栈顶元素

T Mystack::GetTopEle()

{

if(IsEmpty())

return NULL; else

return s->ele[s->top];

}

template

void Mystack::Pop() //删除栈顶元素

{

if(IsEmpty())

cout<<"Empty !"<

else s->top=s->top+1;

}

template

void Mystack::Push(T x) //入栈

{

if(s->top==0)

cout<<"Full !"<

s->top--;

s->ele[s->top]=x;

}

}

template

void Mystack::DisplayStack() //打印栈

{

cout<<"输出栈:";

int i=s->top;

while(s->ele!=NULL&&i

{

cout<ele[i]<<" ";

i++;

} cout<

}

int main()

{

Mystack news;

int i;

news.MakeNull();

for(int i=0;i<30;i++)

news.Push(i);

news.DisplayStack();

cout<<"入栈:";

cin>>i;

news.Push(i);

news.DisplayStack();

cout<<"栈顶元素出栈"<

news.DisplayStack();

system("pause");

return 0;

}

欢迎访问我的博客:/u/5066584704