1、栈的简介
1.1栈的特点
栈(Stack)是一种线性存储结构,它具有如下特点:
- 栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。
- 限定只能在栈顶进行插入和删除操作。
1.2栈的相关概念
栈的相关概念:
- 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
- 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
- 弹栈:栈的删除操作,也叫做出栈。
例如我们有一个存储整型元素的栈,我们依次压栈:{1,2,3}

在压栈的过程中,栈顶的位置一直在”向上“移动,而栈底是固定不变的。
如果我们要把栈中的元素弹出来:
如果我们要把栈中的元素弹出来:
栈的存储结构
栈既然是一种线性结构,就能够以数组或链表(单向链表、双向链表或循环链表)作为底层数据结构。
本文我们以数组、单向链表为底层数据结构构建栈。
#ifndef MYSTACK_H
#define MYSTACK_H
#include<iostream>
#include<string>
using namespace std;
class MyStack
{
public:
MyStack(int size);
~MyStack();
bool StackEmpty();
bool StackFull();
void clearStack();
int StackLength(); //已有元素的个数
bool push(char elem); //元素入栈,栈顶上升
bool pop(char &elem); //元素出栈,栈顶下降
void StackTraverse();//遍历栈中所有元素
private:
char *m_pBuffer; //栈空间指针
int m_iSize; //栈容量
int m_iTop; //栈顶,栈中元素个数
};
#endif // !MYSTACK_H
在C++中使用STL源库栈
- #include<iostream>
- #include<stack>
- using namespace std;
- int main(){
- stack<int>mys;
- mys.push(5);
- mys.push(3);
- mys.push(8);
- mys.push(4);
- mys.push(1);
- mys.push(2);
- mys.push(7);
- while(!mys.empty()){
- cout<<mys.top()<<" ";
- mys.pop();
- }
- cout<<endl;
- return 0;
- }