考研408数据结构(持续更新中...)

顺序栈

基本概念

顺序栈是一种基于数组实现的栈结构,利用连续的内存空间存储数据,遵循"后进先出"(LIFO)原则。栈顶指针(通常为top)动态指向当前栈顶元素的位置,支持压栈(push)和弹栈(pop)操作。

核心特性

  • 存储结构:通过数组实现,需预先分配固定大小的内存空间。
  • 栈顶指针 :初始值为-1(空栈),插入元素时top递增,删除时递减。
  • 时间复杂度:压栈和弹栈操作的时间复杂度均为O(1)。
cpp 复制代码
#include <stdio.h>

// 考研标准:栈的最大容量(可根据题目修改)
#define MaxSize 50

// 顺序栈结构体定义(考研必考写法)
typedef struct {
    // 静态数组存放栈元素
    int data[MaxSize];
    // 栈顶指针:指向栈顶元素(考研最常用定义方式)
    int top;
} SqStack;

// 1. 初始化栈(核心)
void InitStack(SqStack *S) {
    // 栈顶指针置为-1,表示空栈
    S->top = -1;
}

// 2. 判断栈是否为空
int StackEmpty(SqStack S) {
    // 栈顶为-1 → 空栈,返回1;否则返回0
    return S.top == -1;
}

// 3. 判断栈是否为满
int StackFull(SqStack S) {
    // 栈顶指向最后一个元素 → 栈满,返回1
    return S.top == MaxSize - 1;
}

// 4. 入栈操作(进栈)
int Push(SqStack *S, int e) {
    // 栈满,入栈失败
    if (StackFull(*S))
        return 0;

    // 栈顶指针先+1,再赋值
    S->data[++S->top] = e;
    // 入栈成功
    return 1;
}

// 5. 出栈操作(删除栈顶元素,用e返回值)
int Pop(SqStack *S, int *e) {
    // 栈空,出栈失败
    if (StackEmpty(*S))
        return 0;

    // 先取栈顶元素,栈顶指针再-1
    *e = S->data[S->top--];
    // 出栈成功
    return 1;
}

// 6. 取栈顶元素(不删除)
int GetTop(SqStack S, int *e) {
    // 栈空,取元素失败
    if (StackEmpty(S))
        return 0;

    *e = S.data[S.top];
    // 取元素成功
    return 1;
}

// 7. 销毁栈(静态栈无需free,仅重置指针即可)
void DestroyStack(SqStack *S) {
    S->top = -1;
}

// 主函数:测试栈的所有操作(考研答题可写可不写,建议写上)
int main() {
    // 定义一个栈
    SqStack S;
    // 初始化栈
    InitStack(&S);

    // 测试入栈
    Push(&S, 10);
    Push(&S, 20);
    Push(&S, 30);
    printf("入栈元素:10,20,30\n");

    // 测试取栈顶
    int topElem;
    GetTop(S, &topElem);
    printf("当前栈顶元素:%d\n", topElem);

    // 测试出栈
    int e;
    Pop(&S, &e);
    printf("出栈元素:%d\n", e);
    GetTop(S, &topElem);
    printf("出栈后栈顶元素:%d\n", topElem);

    // 测试判空
    if (StackEmpty(S))
        printf("栈为空\n");
    else
        printf("栈不为空\n");

    // 销毁栈
    DestroyStack(&S);
    return 0;
}
相关推荐
想做小南娘,发现自己是女生喵10 小时前
【无标题】
数据结构·算法
凤凰院凶涛QAQ14 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
郝学胜-神的一滴15 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe15 小时前
算法滑动窗口
数据结构·算法
LuminousCPP18 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水18 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
LuminousCPP21 小时前
单链表专题(应用篇):三道经典题吃透删除、反转与快慢指针
c语言·数据结构·笔记
:-)1 天前
算法-希尔排序
数据结构·算法·排序算法
罗超驿1 天前
2.算法效率的核心密码:时间复杂度和空间复杂度详解
java·数据结构·算法
:-)2 天前
算法-堆排序
数据结构·算法·排序算法