C语言利用模板实现简单的栈类
概述
本文介绍如何利用C语言中的模板来实现一个简单的栈类,使用者可以通过该类方便地进行基本的栈操作,比如入栈、出栈、查看栈顶元素等。
设计思路
栈是一种后进先出的数据结构,本文中我们采用单向链表的形式来实现栈,每个节点存储一个数据元素,同时每个节点还有个指向下一个节点的指针。栈的主要操作为入栈、出栈、查看栈顶元素,我们在代码中实现这些操作,同时通过模板形式定义栈类,使得栈可以处理不同类型的数据。
具体实现
首先,我们定义链表节点结构体 StackNode
,如下:
template<typename T>
struct StackNode {
T data;
StackNode<T>* next;
StackNode(T value) : data(value), next(NULL) {}
};
结构体包含一个模板类型的数据成员 data
,一个指向下一个节点的指针成员 next
,以及一个构造函数用于初始化数据成员。
接着,我们定义栈类 Stack
,如下:
template<typename T>
class Stack {
public:
Stack();
~Stack();
bool empty() const;
int size() const;
void push(const T& value);
void pop();
T& top();
private:
StackNode<T>* m_top;
int m_size;
};
栈类包含一个指向栈顶节点的指针成员 m_top
,以及一个整型成员 m_size
用于记录栈中元素的数量。其中,构造函数用于初始化指针成员和整型成员;析构函数用于释放栈中所有节点的内存,避免内存泄漏;空函数 empty
用于判断栈是否为空,如果栈为空则返回 true,否则返回 false;整型函数 size
用于返回栈的元素数量;函数 push
用于将元素入栈;函数 pop
用于将栈顶元素出栈;函数 top
用于返回栈顶元素的值。这些函数的具体实现如下:
template<typename T>
Stack<T>::Stack() : m_top(NULL), m_size(0) {}
template<typename T>
Stack<T>::~Stack() {
StackNode<T>* current = m_top;
while (current) {
StackNode<T>* temp = current;
current = current->next;
delete temp;
}
}
template<typename T>
bool Stack<T>::empty() const {
return m_size == 0;
}
template<typename T>
int Stack<T>::size() const {
return m_size;
}
template<typename T>
void Stack<T>::push(const T& value) {
StackNode<T>* node = new StackNode<T>(value);
node->next = m_top;
m_top = node;
++m_size;
}
template<typename T>
void Stack<T>::pop() {
if (m_size == 0) {
return;
}
StackNode<T>* node = m_top;
m_top = m_top->next;
delete node;
--m_size;
}
template<typename T>
T& Stack<T>::top() {
return m_top->data;
}
最后,在代码中使用该栈类时,比如可以创建一个整型元素的栈并进行一些基本操作,示例如下:
#include <iostream>
#include "Stack.h"
int main() {
Stack<int> s;
std::cout << s.empty() << std::endl; // 输出 1
s.push(1);
s.push(2);
s.push(3);
std::cout << s.top() << std::endl; // 输出 3
s.pop();
std::cout << s.top() << std::endl; // 输出 2
std::cout << s.size() << std::endl; // 输出 2
return 0;
}
总结
本文介绍了如何利用C语言中的模板来实现一个简单的栈类,实现了栈的基本操作,同时通过模板形式定义栈类,使得栈可以处理不同类型的数据。读者可以根据需求进一步扩展栈类的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言利用模板实现简单的栈类 - Python技术站