(2011.10.19)3_a1.cpp -- 顺序栈结构的定义

 

源代码:

// 3_a1.cpp -- 顺序栈结构的定义

/* 
 * -> 程序要求:
 * 1. 完成对顺序栈结构的定义,以及对顺序栈的各种基本运算的实现(每种基本运算用一个函数来实现)。
 * 2. 基本运算包括:初始化Init_sqstack运算、判栈空Empty_sqstack运算、入栈Push_sqstack运算、出栈Pop_sqstack运算、取栈顶元素Gettop_sqstack运算。
 * 3. 并且在main函数中分别调用以上各种基本运算的函数来使用,以证明其功能已实现。
 * 4. 此题的源程序保存为 3_a1.cpp
 */

/*
 * -> 程序分析:
 * 1. 顺序栈比顺序表还要容易写,思想方面,差不多是顺序表的一个特例。
 * 2. 顺序栈的主要数据成员有:决定大小的元素(最大值,使用值),存放的数据。
 * 3. 顺序栈的函数成员正如题目所列出来的那几种,从栈的功能来想的话,就是 [入,出,取],其它的有判空,初始,销毁,复制等还有一些按程序需求的扩展要求。
 */

#include <iostream>
using std::cout;
using std::endl;

template <typename elem>
class sqstack
{
private:
	enum size{defaultmaxsize = 6};		//  默认栈大小
	int maxsize;					// 该栈顶的最大size
	int top;						// 当前的栈顶设为top - 1
	elem * arr;						// 整个栈表的指针
public:
	// 初始化及销毁顺序栈表
	sqstack (signed ms = defaultmaxsize): maxsize(ms), arr(new elem[maxsize]), top(0){}
	~sqstack(){ delete [] arr; maxsize = 0; top = 0;}

	//基本功能的实现
	bool isempty()	{return top == 0;}				// 判断表是否为空
	bool isfull()	{return top == maxsize;}		// 判断表是否满
	int sqstacksize() {return top;}					// 返回栈表的大小

	// [取,出,入]
	void push(const elem &);				// 入
	void pop();								// 出
	elem Gettophelp();						// 取栈顶元素
	void Gettop();
};

template<typename elem>
void sqstack<elem>::push(const elem & pelem)		// 入栈
{
	if (isfull() == true)
	{
		cout << "\n放入元素失败,表满。\n";
		return;
	}
	arr[top++] = pelem;
	cout << "\n成功放入元素" << pelem << "\n";
	return;
}

template <typename elem>
void sqstack<elem>::pop()						// 出栈
{	
	if (isempty() == true)
	{
		cout << "出栈失败,表空。";
		return;
	}
	--top;
	return;
}

template <typename elem>
elem sqstack<elem>::Gettophelp()			// 取栈顶元素
{
	return arr[top - 1];
}

template <typename elem>
void sqstack<elem>::Gettop()
{
	if(isempty())
	{
		cout << "元素获取失败,栈空。";
		return;
	}
	else 
		cout << "栈顶元素为" << Gettophelp();
	return;
}

int main()
{
	cout << ".................................栈功能测试开始................................\n";
	sqstack<int> test;
	
	// 入
	cout << "\n-> 入栈测试:( 当前栈顶位置为" << test.sqstacksize() << " )\n";
	cout << "放入元素 1, 2, 3, 4, 5, 6.\n";
	for (int i = 1; i != 10; ++i)
	{	
		cout << "i = " << i << ": ";
		test.push(i);
	}
	
	// 取
	cout << "\n-> 取栈顶元素测试:\n"; 
	test.Gettop();

	// 出
	cout << "\n\n-> 出栈测试:( 当前栈顶位置为" << test.sqstacksize() << " )\n";
	for (int i = 1; i != 10; ++i)
	{	
		cout << "第 " << i << "次出栈: ";
		test.pop();
		cout << endl;
	}
	system("pause");
	return 0;
}


 

运行结果:

.................................栈功能测试开始................................

-> 入栈测试:( 当前栈顶位置为0 )
放入元素 1, 2, 3, 4, 5, 6.
i = 1:
成功放入元素1
i = 2:
成功放入元素2
i = 3:
成功放入元素3
i = 4:
成功放入元素4
i = 5:
成功放入元素5
i = 6:
成功放入元素6
i = 7:
放入元素失败,表满。
i = 8:
放入元素失败,表满。
i = 9:
放入元素失败,表满。

-> 取栈顶元素测试:
栈顶元素为6

-> 出栈测试:( 当前栈顶位置为6 )
第 1次出栈:
第 2次出栈:
第 3次出栈:
第 4次出栈:
第 5次出栈:
第 6次出栈:
第 7次出栈: 出栈失败,表空。
第 8次出栈: 出栈失败,表空。
第 9次出栈: 出栈失败,表空。
请按任意键继续. . .


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值