数据结构3.0 栈、队列和数组

一、栈的基本概念

①栈的定义

②栈的基本操作

③常考题型

④小结

二、栈的顺序存储实现

①顺序栈的定义

②初始化操作

③进栈操作

④出栈操作

⑤读栈顶元素操作

⑥共享栈

⑦小结

三、栈的链式存储实现

①链栈的定义

②小结

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

// 链栈的结点结构
typedef struct LinkNode {
    int data;               // 数据域
    struct LinkNode *next;  // 指针域
} LinkNode;

// 链栈结构(不带头结点,栈顶指针直接指向栈顶元素)
typedef struct {
    LinkNode *top;  // 栈顶指针
} LinkStack;

// 1. 初始化链栈
void InitStack(LinkStack &S) {
    S.top = NULL;  // 空栈时栈顶指针为NULL
}

// 2. 判断栈是否为空
bool StackEmpty(LinkStack S) {
    return S.top == NULL;
}

// 3. 进栈操作(增)
bool Push(LinkStack &S, int x) {
    // 生成新结点
    LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
    if (p == NULL) return false; // 内存分配失败
    
    p->data = x;
    p->next = S.top;  // 新结点的next指向原栈顶
    S.top = p;        // 更新栈顶指针
    return true;
}

// 4. 出栈操作(删)
bool Pop(LinkStack &S, int &x) {
    if (StackEmpty(S)) return false; // 栈空,出栈失败
    
    LinkNode *p = S.top;    // 指向栈顶结点
    x = p->data;            // 获取栈顶元素
    S.top = S.top->next;    // 栈顶指针下移
    free(p);                // 释放原栈顶结点
    return true;
}

// 5. 获取栈顶元素(查)
bool GetTop(LinkStack S, int &x) {
    if (StackEmpty(S)) return false; // 栈空,获取失败
    
    x = S.top->data;
    return true;
}

// 测试函数
int main() {
    LinkStack S;
    InitStack(S);
    
    // 进栈
    Push(S, 1);
    Push(S, 2);
    Push(S, 3);
    
    // 获取栈顶
    int topVal;
    if (GetTop(S, topVal)) {
        printf("栈顶元素:%d\n", topVal);
    }
    
    // 出栈
    int popVal;
    while (Pop(S, popVal)) {
        printf("出栈元素:%d\n", popVal);
    }
    
    // 判空
    if (StackEmpty(S)) {
        printf("栈已为空\n");
    }
    
    return 0;
}

四、队列的基本概念

①队列的定义

②队列的基本操作

③小结

五、队列的顺序实现

①初始化操作

②入队操作

③循环队列

④循环队列------入队操作

⑤循环队列------出队操作

⑥判断队列已满/已空

⑦小结

六、队列的链式实现

①初始化(带头结点)

②初始化(不带头结点)

③入队(带头结点)

④入队(不带头结点)

⑤出队(带头结点)

⑥出队(不带头结点)

⑦队列满的条件

⑧小结

七、双端队列

相关推荐
MATLAB代码顾问8 分钟前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
万粉变现经纪人2 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒2 小时前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼2 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
MediaTea3 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z3 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue3 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
小郑加油3 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦3 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
风筝在晴天搁浅3 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法