目录一、栈的概念二、栈的基本组成和操作三、栈元素的存储方式四、c++实现静态栈(1)栈类的设计(1)isEmpty()判断是否为空(2)isFull()判断是否已满(3)push()
栈的英文为stack
,译为一叠或者一摞。栈是一种采用先进后出FILO(first in last out)或称为后进先出LIFO(last in first out)策略进行元素访问的数据结构。栈经常被比作是一摞碟子,最上面的碟子是最后放上去的,却是最先被拿走的。
如果要正确的使用栈,则必须保证其含有栈顶指针和栈元素。此外,栈的基本操作含有:
其中,栈包含三种状态:栈空、一般状态、栈满。检测栈满是非常重要的步骤,防止在栈容量不能扩充时出现溢出现象,此时称为上溢。如果在栈空时进行出栈操作,此时会出现下溢。所以在入栈和出栈时,必须对栈的状态进行检查。
常用的实现方式分为两种;
使用静态数组实现栈结构时,栈底固定不变,栈顶随着压栈和出栈操作进行自加和自减。一般采用整型变量来表示栈顶,压栈时栈顶变量加一,出栈时栈顶变量减一。
根据前面对栈基本功能和组成的描述,栈类应该包含下述的公有函数成员和私有数据成员。其中currentSize
为栈顶指针,用于压栈、入栈、判空、判满等操作;T表示模板参数类型,栈元素为T类型数组,可以在隐式或显式实例化时指定;SIZE表示栈的容量,一旦确定就不能更改。
代码如下:
template <typename T, int SIZE=10>
class Stack {
public:
bool isEmpty();
bool isFull();
void push(const T &data);
T pop();
void clear();
T getTop();
private:
// 栈顶指针
int currentSize=-1;
T array[SIZE];
};
如果栈顶指针值为0,则表示为栈为空,代码如下:
template<typename T, int SIZE>
bool Stack<T, SIZE>::isEmpty() {
if (currentSize == 0) {return true;}
else {return false;}
}
如果栈顶指针值等于栈的存储容量SIZE时,栈满:
template<typename T, int SIZE>
bool Stack<T, SIZE>::isFull() {
if (currentSize == SIZE) {return true;}
else { return false; }
}
将数据压栈时,栈顶指针同步加一;
template<typename T, int SIZE>
void Stack<T, SIZE>::push(const T &data) {
// 栈顶压入
currentSize++;
array[currentSize] = data;
}
将数据弹出后,栈顶指针需要减一:
template<typename T, int SIZE>
T Stack<T, SIZE>::pop() {
if(currentSize>=1){return array[currentSize--];}
}
获取栈顶数据并不需要对栈顶指针进行移动:
template<typename T, int SIZE>
T Stack<T, SIZE>::getTop() {
return array[currentSize];
}
由于采用的是静态数组,所以清空栈时无需进行内存释放,将栈顶指针归零即可:
template<typename T, int SIZE>
void Stack<T, SIZE>::clear() {
currentSize = -1;
}
到此这篇关于C++实现栈与分析栈的知识点的文章就介绍到这了,更多相关C++栈内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C++实现栈与分析栈的知识点
本文链接: https://www.lsjlt.com/news/142168.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0