数据结构----栈(静态数组)


栈是先进先出的一种数据结构。本文是以静态数组为存储结构的栈的实现。

栈的ADT如下:

{

数据元素集合:一个元素的有序序列,只能在栈顶进行入栈和出栈的操作;

基本方法:

1.stack ():创建一个空栈;

2.empty ():检查栈是否为空;

3.push ():在栈顶添加一个元素;

4.top () :提取栈顶元素;

5.pop () :删除栈顶元素;

};

基本操作算法描述如下:

1.构造函数:

编译器将为数据成员myArray[] 和 Top分配内存,这样stack 的构造函数只需要执行创建一个空栈所需要的初始化工作;因为Top是指向栈顶的,所以很自然地通过将Top赋值为-1就可标志一个空栈;

2.判空函数:

由于Top是指向栈顶的,所有判断栈是否为空只需判断Top是否为-1即可;

3.入栈函数:

如果myArray[]还没有满 (即Top < max)

(1)将Top加一;

(2)将值存储到myArray[Top]

否则

处理入栈失败操作

4.提取栈顶元素函数:

如果栈为非空,返回myArray[Top]中的值;否则指示栈空;

5.删除栈顶元素函数:

如果栈非空,Top减一;否则指示栈空;


具体代码:

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

#define max 10   //栈的最大容量

typedef int StackElement;

//栈的类声明部分
class stack
{
	public :
		stack ();
		bool empty () const;
		void push (const StackElement & item);
		StackElement top () const;
		void pop ();
		void display (ostream & out) const;
	private :
		StackElement myArray[max];
		int Top;
};



//栈的实现部分
stack::stack () : Top (-1) {}  //

bool stack::empty () const 
{
	return Top == -1;
}

void stack::push (const StackElement & item)
{
		if (Top < max-1)
		{	Top++;
			myArray[Top] = item;
		}
		else
			cerr << "Push Error\n";
}

void stack::display (ostream & out) const
{
	for (int i=Top; i>=0; i--)
		out << myArray[i] <<endl;
}
StackElement stack::top () const
{
	if (Top==-1)
		cerr << "Top Error\n";
	else
		return myArray[Top];
}

void stack::pop ()
{
	if (Top!=-1)
		Top--;
	else
		cerr << "pop Error\n";
}


//栈类测试部分
int main ()
{
	stack s;
	cout << "stack created.Empty ?\n" << (s.empty ()?"YES":"NO") << endl;
	cout << "How Many item to enter the stack?\n";
	int num;
	cin >> num;
	for (int i=1;i<=num;i++)
	{
		cout << "push " << i << " to the stack!\n";
		s.push (i);
	}
	cout << "stack contents: \n";
	s.display (cout);

	cout << "stack empty ? " << s.empty () << endl;
	cout << "Top item : " << s.top() << endl;

	while (!s.empty ())
	{
		cout << "Poping " << s.top () << endl;
		s.pop ();
	}
	cout << "stack empty ?\n" << s.empty () << endl;
	cout << "Top value " << s.top () << endl;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值