【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模板网!

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

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

相关文章

  • C语言实现队列--数据结构

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

    2024年02月05日
    浏览(45)
  • 数据结构:队列(Python语言实现)

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

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

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

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

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

    2023年04月22日
    浏览(35)
  • 堆--C语言实现数据结构

    本期带大家一起用C语言实现堆🌈🌈🌈 堆(Heap)是一种特殊的树状数据结构,它是一种完全二叉树。堆被广泛应用于优先队列、排序算法等领域。 堆的特点: 堆分为最大堆和最小堆两种类型。最大堆中,父节点的值大于或等于其子节点的值;最小堆中,父节点的值小于或

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

    本期带大家一起用C语言实现栈🌈🌈🌈 栈是一种常见的数据结构,它遵循后进先出(Last In, First Out)的原则。可以将其类比为现实生活中的一摞书或者一叠盘子。 栈由一个连续的内存区域组成,可以存储一系列的元素。在栈的一端称为栈顶,另一端称为栈底。 栈的主要操作

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

    堆是一种特殊的数据结构,它是一棵完全二叉树,同时满足堆属性,即父节点的值总是大于或小于其子节点的值。如果父节点的值总是大于子节点的值,那么我们称之为大根堆;反之,如果父节点的值总是小于子节点的值,那么我们称之为小根堆。在堆中,根节点的值最大(

    2024年02月08日
    浏览(39)
  • 数据结构初阶(用C语言实现简单数据结构)--栈和队列

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

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

            机遇对于有准备的头脑有特别的亲和力。本章将讲写到链表其中主要将写到单链表和带头双向循环链表的如何实现。    话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的部分(不是死记硬背哈,多敲);黑色加粗

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

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

    2024年02月02日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包