数组栈类模板 C++ Builder代码演示类模板

文章介绍了如何使用C++创建一个类模板来实现栈数据结构,支持不同类型的元素(如字符、整数和字符串)。代码示例展示了栈的基本操作,包括压栈、弹栈、判空和获取栈顶元素。此外,还提供了一个简单的测试用例来验证栈的功能。
摘要由CSDN通过智能技术生成

类模板.cpp

// 栈的特点
// 栈(stack)是以一种线性存储结构,
// 它具有一下特点:栈中的数据元素遵守“先进后出(First in Last out)后进先出”的原则,
// 简称FILO结构;
// 限定只能在栈顶进行插入和删除操作。

#include <iostream>

const int capacity = 5; // 栈的容量

// 定义栈的一个类模板
template<class T> // 数据类型参数化
class Stack // 定义类(类模板)
{
private:
	T array[capacity]; // 顺序栈,T 为元素类型(可变)
	int topCount; // 栈顶元素的索引位置,即栈的有效数量,int 不可变

public:
	Stack() {
		topCount = -1;
	} // 构造函数,初始化栈顶

public:
	bool push(T ob); // 压栈操作, 入栈函数,T 为参数的类型
	T topv(); // 获取栈顶元素
	T pop(); // 弹栈操作, 出栈函数,T 为返回值类型
	bool isEmpty(); // 判空操作
	int size(); // 求栈的大小
}; // 这个分号不能少

//----------------------类外实现部份-----------------------
/* 栈的判空操作 */
template<typename T>
bool Stack<T>::isEmpty() {
	return topCount == -1; // 栈元素为-1时为栈空
}

/* 获取栈顶元素 */
template<typename T>
T Stack<T>::topv() {
	if (topCount != -1) {
		return array[topCount];
	}
}

/* 返回栈的大小 */
template<typename T>
int Stack<T>::size() {
	return topCount + 1;
}

// --------两个成员函数的类外实现------------
/* 压栈,插入 */
template<typename T>
bool Stack<T>::push(T ob) // 入栈成员函数
{
	if (topCount < capacity - 1) { // 先判断是否栈满
		array[++topCount] = ob;
		return 1;
	}
	return 0;
}

/* 弹栈 */
template<typename T>
T Stack<T>::pop() // 出栈成员函数
{
	if (topCount != -1) { // 先判断是否是空栈
		return array[topCount--];
	}
}

 Unit1.cpp

 

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include  "类模板.cpp"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
}

// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) {
	// 定义栈
	Stack<char>s1;
	Stack<int>s2, *sp = &s2;
	Stack<UnicodeString>s3, *sp3 = &s3;
	// -------------------字符------------------------
	s1.push('a');
	s1.push('b');
	s1.push('c');
	s1.push('d');
	Memo1->Clear();
	if (s1.isEmpty()) {
		Memo1->Lines->Add("栈为空");
	}
	else {
		Memo1->Lines->Add("栈的大小:" + IntToStr(s1.size()));
		Memo1->Lines->Add("栈顶元素: " + (UnicodeString)s1.topv());
		Memo1->Lines->Add("pop s1:");
		while (!s1.isEmpty())
			Memo1->Lines->Add(s1.pop());
	}
	// --------------------整型-----------------------
	s2.push(1);
	s2.push(2);
	s2.push(3);
	s2.push(4);
	s2.push(5);
	if (s2.isEmpty()) {
		Memo1->Lines->Add("栈为空");
	}
	else {
		Memo1->Lines->Add("栈的大小:" + IntToStr(s2.size()));
		Memo1->Lines->Add("栈顶元素: " + (UnicodeString)s2.topv());
		Memo1->Lines->Add("pop s2:");
		while (!s2.isEmpty())
			Memo1->Lines->Add(sp->pop());
	}
	// --------------------字符串-----------------------
	s3.push("北京");
	s3.push("上海");
	s3.push("深圳");
	s3.push("衡阳");
	s3.push("成都");
	if (!s3.push("东京"))
		Memo1->Lines->Add("栈容量不够,东京插入失败");

	if (s3.isEmpty()) {
		Memo1->Lines->Add("栈为空");
	}
	else {
		Memo1->Lines->Add("栈的大小:" + IntToStr(s3.size()));
		Memo1->Lines->Add("栈顶元素: " + (UnicodeString)s3.topv());
		Memo1->Lines->Add("pop s3:");
		while (!s3.isEmpty())
			Memo1->Lines->Add(sp3->pop());
	}
}
// ---------------------------------------------------------------------------

输出效果

源码下载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸运骄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值