栈和队列是应用最多的数据结构之二,有数组实现和链表实现两种方式。当需要对容器做出限制,只允许一边插入和取出数据时,则需要用到栈。下面将总结数组实现的栈和阐述其原理。
一、线性表——栈Stack
1.1栈Stack定义
栈是一种特殊的线性表,其插入(也称为入栈或压栈)和删除(也称为弹出或出栈)操作都在表的同一端进行;该插入和删除的端口称为栈顶(top),另一端称为栈底(bottom)。
1.2栈的基本运算
1.2.1基本运算
(1) 初始化(构造一个空的栈)
(2) 计算栈长度(栈中节点个数)
(3) 插入节点(栈顶插入push)
(4) 删除节点(栈顶删除pop)
(5) 查找节点(栈顶查找top)
简单来说,就是实现栈的初始化、节点的增删查,没有改。
1.3线性表结构(链表)
图1 栈结构
由图1可知,栈是容纳一系列节点的容器,节点操作只能在一端进行插入和删除,节点对应代码里面的Element类对象。
1.4代码实现
common.h
#pragma once
typedef short int BYTE;
typedef unsigned int WORD32;
Element.h
#pragma once
#include "common.h"
class Element
{
public:
Element();
Element(BYTE key, WORD32 value);
~Element();
BYTE getKey() const;
WORD32 getValue() const;
void dump() const;
private:
BYTE key;
WORD32 value;
};
Stack.h
#pragma once
#include "Element.h"
class Stack
{
public:
Stack(WORD32 capability);
~Stack();
const WORD32 getSize() const; // 返回实际元素个数
const WORD32 getCapability() const; // 返回最大容量
bool push(const Element& element); // 加入元素
bool pop(); //删除元素
Element*