【C/C++】实现模板类数据结构 -- 栈 (亲测可用)

这篇具有很好参考价值的文章主要介绍了【C/C++】实现模板类数据结构 -- 栈 (亲测可用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/* *
* 模板类: 栈结构[借助数组实现]
*/
template<typename T>
class Stack {
private:
	T *data;	/* 数组第一个元素地址,存放T类型数组元素 */
	int size;	/* 当前栈实际填充数量 */
	int capacity;	/* 最大装载量 */
public:
	Stack(int m_capacity) : size(0), capacity(m_capacity) {/* 类构造函数初始化列表进行初始化变量, 降低拷贝赋值次数 */
		zz_log("Stack constructor");
		data = new T[capacity];
		zz_log("Stack capacity: %d, memory size: %u bytes", capacity, capacity * sizeof(T));
	}

	void push(T elem) {
		if (size > capacity - 1) {
			zz_log("Stack overflow");
			return;
		}
		zz_log("Statck push [%d] elem", size);
		data[size++] = elem;
	}

	T pop() {
		zz_log("Stack pop [%d] elem", size - 1);
		return data[--size]; /* 左减减,是由于在push操作后,size进行了自增1, 为下次数据填充做准备。所以要pop时,要先向前移动一位,才是最后一位 */
	}

	int empty() {
		zz_log("Stack current elem count: %d", size);
		return size;
	}

	~Stack() {
		zz_log("Stack destructor");
		delete[] data; /* data指针所指向的内存,使用delete[]运算符释放。 */
		data = NULL;
	}
};

void test_stack() 
{
	zz_log("test_statck run");

	Stack<int> s(2);
	s.push(1);
	s.push(2);
	s.push(3);
	zz_log("pop top elem from stack: [%d]", s.pop());
}

int main()
{
	test_stack();
	return 0;
}

知识点:

在C++中,可以使用模板类来定义通用的数据结构或算法,以适应不同类型的数据。下面是定义一个模板类的基本语法:

template <typename T>
class ClassName {
    // 类的成员和方法
};

在上面的代码中,template <typename T> 表示这是一个模板类的声明,T 是一个占位符类型,可以在类中使用。你可以根据需要选择其他的占位符名称,比如使用 class 关键字代替 typename

在模板类的定义中,你可以使用 T 作为类型参数来定义类的成员变量、成员函数和构造函数。例如:

template <typename T>
class Stack {
private:
    T* data;
    int size;
public:
    Stack(int capacity) {
        data = new T[capacity];
        size = 0;
    }
    
    void push(T element) {
        data[size++] = element;
    }
    
    T pop() {
        return data[--size];
    }
};

上面的代码定义了一个模板类 Stack,用于表示一个栈数据结构。T 是栈中元素的类型,可以是任意类型。在构造函数、pushpop 方法中,可以使用 T 来声明变量和参数的类型。

使用模板类时,你可以根据需要指定具体的类型参数。例如:

Stack<int> intStack(10);  // 创建一个存储整数的栈
intStack.push(5);
intStack.push(10);
int poppedInt = intStack.pop();

Stack<double> doubleStack(10);  // 创建一个存储浮点数的栈
doubleStack.push(3.14);
doubleStack.push(2.718);
double poppedDouble = doubleStack.pop();

上面的代码分别创建了一个存储整数和浮点数的栈,并进行了一些操作。

通过使用模板类,你可以在不同的类型上重用相同的代码,提高代码的复用性和灵活性。文章来源地址https://www.toymoban.com/news/detail-662512.html

到了这里,关于【C/C++】实现模板类数据结构 -- 栈 (亲测可用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:队列(Python语言实现)

    队列是一种 先进先出 的数据结构(特殊的线性结构),在队列 尾部 插入新元素,在队列 头部 删除元素。 一般队列的基本操作如下: create:创建空队列。 enqueue:将新元素加入队列的尾部,返回新队列。 dequeue:删除队列头部元素,返回新队列。 front:返回队列头部的元素

    2024年02月13日
    浏览(45)
  • 数据结构——队列(C语言实现)

    队列是一种特殊的线性结构,数据只能在一端插入,数据也只能在另一端进行删除。插入数据的那一端称之为队尾,插入数据的动作称之为入队。删除数据的那一端称之为队头,删除数据的动作称之为出列。队列遵守的是FIFO原则(Frist In First Out),即先进先出原则。 队列具

    2024年02月03日
    浏览(77)
  • 数据结构 队列(C语言实现)

            任其事必图其效;欲责其效,必尽其方。——欧阳修;本篇文章主要写的是什么是队列、以及队列是由什么组成的和这些组成接口的代码实现过程。( 大多细节的实现过程以注释的方式展示请注意查看 )    话不多说安全带系好,发车啦 (建议电脑观看) 。 附

    2024年02月11日
    浏览(52)
  • C语言实现队列--数据结构

    😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️ 💥个人主页:🔥🔥🔥大魔王🔥🔥🔥 💥所属专栏:🔥魔王的修炼之路–数据结构🔥 如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的 点赞 👍和 关注 💖,支持一

    2024年02月05日
    浏览(43)
  • 队列--C语言实现数据结构

    本期带大家一起用C语言实现队列🌈🌈🌈 队列是一种线性数据结构,它按照先进先出(FIFO)的原则进行操作。可以把队列想象成排队买票或者排队上公交车的队伍。 顺序队列 由一个连续的内存区域组成,可以存储多个元素。队列有两个指针,分别指向队头(Front)和队尾(

    2024年02月16日
    浏览(34)
  • 数据结构 栈(C语言实现)

            时间就是生命,时间就是速度,时间就是气力。——郭沫若;本章继续学习数据结构,本章主要讲了什么是栈以及栈的基本功能和实现方法。    话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的部分(不是死记

    2024年02月09日
    浏览(39)
  • C语言实现栈--数据结构

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍🔥大魔王与你分享:“断剑重铸的锐雯败于菲奥娜,原来破镜重圆的爱到处都是破绽”。 栈是一种特殊的线性表,其只允许在固定的

    2023年04月22日
    浏览(30)
  • 数据结构初阶(用C语言实现简单数据结构)--栈和队列

    ✨✨欢迎来到T_X_Parallel的博客!!       🛰️博客主页:T_X_Parallel       🛰️专栏 : 数据结构初阶       🛰️欢迎关注:👍点赞🙌收藏✍️留言 这小猫真好看 言归正传,通过上篇有关顺序表和链表的博客,可以了解到线性表的一些大致特征,这篇博

    2024年02月08日
    浏览(40)
  • C语言实现链表--数据结构

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍🔥大魔王与你分享:很喜欢宫崎骏说的一句话:“不要轻易去依赖一个人,它会成为你的习惯当分别来临,你失去的不是某个人而是你精

    2024年02月02日
    浏览(40)
  • 数据结构顺序表(C语言实现)

            从本章开始就是开始数据结构的开端,本章将会写出数据结构中的顺序表的代码实现,多会以注释的方法来描述一些细节(注释是我们程序员必须常用的工具)。         话不多说安全带系好,发车啦(建议电脑观看)。 附:红色,部分为重点部分;蓝颜色为需

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包