首页
学习
活动
专区
圈层
工具
发布

C++ 栈

作者头像
Dragon水魅
发布2026-01-23 19:16:18
发布2026-01-23 19:16:18
1050
举报
总结归纳
  1. 栈的特点是先进后出(First In Last Out / FILO),可以理解为叠罗汉,先来的叠在最下面,要等上面的都抽走了它才能出来。
  2. 栈的创建、入栈、出栈、查找,都是在O(1)的时间复杂度内完成。
  3. 关于销毁栈,这里使用的是静态数组,所以只需将S.top重置为-1,即为清空栈(逻辑上),新元素的入栈直接覆盖即可。
  4. 通过变量声明占用的内存,将在代码结束后由系统自动回收,只有通过 malloc / new 申请的内存空间,才需要手动 free / delete。
代码实现
代码语言:javascript
复制
/*
栈
*/

#define MaxSize 10 // 栈中元素的最大个数

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

typedef int ElemType;

struct SqStack {
    ElemType data[MaxSize]; // 静态数组存放栈顶元素
    int top;                // 栈顶指针
};

// 初始化栈
void InitStack(SqStack &S) { S.top = -1; }

// 判断栈空
bool StackEmpty(SqStack S) {
    if (S.top == -1) {
        return true;
    } else {
        return false;
    }
}

// 入栈
bool Push(SqStack &S, ElemType x) {
    if (S.top == MaxSize - 1) {
        return false;
    } else {
        S.top++;
        S.data[S.top] = x; // S.top指向栈顶
        return true;
    }
}

// 出栈
bool Pop(SqStack &S, ElemType &x) {
    if (S.top == -1) { // 栈空
        return false;
    } else {
        x = S.data[S.top--]; // 先赋值再--
        return true;
    }
}

// 读取栈顶元素
bool GetTop(SqStack S, ElemType &x) {
    if (S.top == -1) {
        return false;
    } else {
        x = S.data[S.top];
        return true;
    }
}

bool DestroyStack(SqStack &S) { S.top = -1; }

int main() {
    SqStack S;

    InitStack(S);                                    // 初始化
    cout << "栈是否为空:" << StackEmpty(S) << endl; // 判空

    for (int i = 0; i < 5; i++) {
        Push(S, i);
    }

    ElemType top, pop;
    GetTop(S, top);
    cout << "栈顶元素:" << top << endl;

    Pop(S, pop);
    cout << "出栈元素:" << pop << endl;
    GetTop(S, top);
    cout << "新栈顶元素:" << top << endl;

    DestroyStack(S); // 销毁栈
    cout << "栈是否为空:" << StackEmpty(S) << endl; // 判空
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结归纳
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档