考研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;
}
相关推荐
1000世界小札2 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
AIkk867 小时前
医学考研西综306优质网课视频推荐|全科目选课指南
考研
2501_929807257 小时前
考研初试专业课140+总分400+重庆邮电大学801信号与系统考研经验重邮,电子信息与通信工程,真题,大纲,参考书,博睿泽信息通信Jenny。
考研·信息与通信·信号处理·通信·电子信息
一直C13 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
淡海水13 小时前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
疯狂打码的少年14 小时前
【数据结构】板块总结 + 下期预告(数据库技术)
数据结构·笔记·算法
郝学胜-神的一滴14 小时前
Effective Python 条款 1:确认你正在使用的 Python 版本
开发语言·数据结构·python·程序人生·算法
dtq042416 小时前
数据结构 - 线性表 - 单链表
数据结构
1000世界小札16 小时前
排序算法全景总结:从 O(n²) 到 O(n log n),再到线性时间(附完整对比与选型指南)
数据结构·算法·排序算法