数据结构——栈与队列

数据结构------栈与队列

文章目录

一、栈的定义

栈(Stack)是一种具有特殊限制的线性数据结构,它只允许在表的一端进行插入和删除操作。这一端被称为栈顶(Top),另一端被称为栈底(Bottom)。在栈中,最后放入的元素(即最近插入的元素)必须最先被取出(即最先删除的元素),这被称为"后进先出"(Last In First Out,LIFO)原则。

栈可以理解为一个针管,假设水分子不会在针管里自由运动,这样的话,吸进去的最后一滴水,会在针管推压的时候第一个离开针管,这即是栈的"后进先出"特性。

Step1:数据1进栈
栈 1

Step2:数据2入栈
栈 1 2

Step3:数据2出栈
栈 1 2

cpp 复制代码
#include <iostream>
#define MAXN 100
using namespace std;
int a[MAXN];//为栈开辟一个数组空间
int p=0;//栈顶指针

void push(int x){ //压栈
    if(p>=MAXN) cout<<"overflow"; //判断是否溢栈
    else{
        a[p]=x;
        p+=1;
    }
}

void pop(){
    if(p==0) cout<<"It's empty";
    else p-=1;//弹出栈顶
}

void top(){
    if(p==0) cout<<"It's empty";
    else return a[p-1];
}

需要注意的是,根据定义可知,栈顶是 p − 1 p-1 p−1

二、队列的定义

队列是一种线性数据结构,它是一系列元素的集合,其中插入和删除操作的约束条件为"先进先出"(First-In-First-Out,简称FIFO)。

队列可以理解为一根水管,水流从一端流进从另一端流出;也能理解为在超市等待结账的顾客。他与栈相比,他具有两个端口,能同时进行进队和出队的操作。

Step1:数据1进队
队列 1

Step2:数据2入队
队列 1 2

Step3:数据1出队
队列 2 1

cpp 复制代码
#include <iostream>
#define MAXN 100
using namespace std;
int a[MAXN];//为栈开辟一个数组空间
int head=0;//队首指针
int tail=0;//队尾指针
void push(int x){ //压栈
    if(tail>=MAXN) cout<<"overflow"; //判断是否溢栈
    else{
        a[tail]=x;
        tail+=1;
    }
}

void pop(){
    if(head==tail) cout<<"It's empty";
    else head+=1;//弹出栈顶
}

void top(){
    if(head==tail) cout<<"It's empty";
    else return a[head];
}
相关推荐
不会就选b22 分钟前
算法日常・每日刷题--<快排>4
算法
Keven_1128 分钟前
算法札记:树状数组的用途
数据结构·算法
用户6774371758135 分钟前
C++函数参数传递方式详解:string、string&、const string、const string&该怎么选?
算法
cpp_25011 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
晚笙coding1 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
学计算机的计算基1 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法
霸道流氓气质2 小时前
SpringBoot中实现告警判定算法-位报警与模拟量阈值-技术详解
spring boot·算法·jquery
行者全栈架构师2 小时前
混元 Hy3 Agent 实战:季度报告 3 小时变 40 分钟
算法·架构·代码规范
兰令水2 小时前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
好好沉淀3 小时前
主键选择(自增 vs UUID vs 雪花算法)
java·算法