栈的实现.

这是C++算法基础-数据结构专栏的第二十一篇文章,专栏详情请见此处


引入

栈是一种常用的一种线性数据结构。它的使用非常广泛,例如在函数调用中用于保存局部变量、在表达式求值中用于保存操作数等。

下面我们就来讲栈的实现。

定义

栈(stack)的修改与访问是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。

过程

栈就像一个桶,只有一个开口,你往里放东西,等到你要拿东西的时候,第一个拿出来的一定是最后一个放进去的,这就叫先进后出。

我们接下来要学习五种栈的最主要操作:构建,插入(写入)数据、删除数据、取栈顶值、判断栈是否为空

构建栈

我们先定义一个数组,用来表示 ,接着还需要一个变量,用来表示栈顶

向栈顶插入(写入)数据

先在栈顶进行数据赋值 ,然后将

从栈顶弹出数据

直接,使栈减少一层。

Q:将栈减少一层,栈中还有刚刚的数据,直接做会不会有问题呢?

A:没有关系,将栈顶减少一层,就无法访问刚才的数据了,若后来插入数据,数据会被覆盖掉。所以,直接操作栈顶就可以实现了。

取栈顶值

输出的值即可。

判断栈是否为空

判断栈顶的位置 ,若,说明栈为空,反之也成立。

性质

时间复杂度

上述关于栈的操作,时间复杂度都是的。

代码

下面给出栈的实现代码:

复制代码
int stk[N],tt=0;

void push(int x){
    stk[++tt]=x;
}

void pop(){
    tt--;
}

int top(){
    return stk[tt];
}

bool empty(){
    if(tt==0) 
        return 1;
    else
        return 0;
}
代码解释

第一行的各种变量和数组已经在前面讲解了,这里不再详细讲解;push()函数的作用是向栈顶插入(写入)数据;pop()函数的作用是从栈顶弹出数据;top()函数的作用是取栈顶值;empty()函数的作用是判断栈是否为空。


上一篇-双链表的实现 C++算法基础专栏文章 下一篇-表达式求值问题的实现


每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容

点个赞,关注一下呗~

相关推荐
wunaiqiezixin7 小时前
如何在C++中创建和管理线程
c++
雪度娃娃8 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维差分】:[NOIP 2018 提高组] 铺设道路
c++·前缀和·差分·csp·高频考点·信奥赛·铺设道路
星马梦缘8 小时前
aaaaa
数据结构·c++·算法
OpenApi.cc8 小时前
神经网络结构驱动+数据结构分析
数据结构·人工智能·神经网络
喵星人工作室9 小时前
C++火影忍者1.1.2
开发语言·c++
basketball6169 小时前
C++ 中的 ptrdiff_t 详解
开发语言·c++
星恒随风10 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
wunaiqiezixin10 小时前
互斥锁与自旋锁的区别
c++
代码中介商10 小时前
深入解析STL中的stack、queue与priority_queue
开发语言·c++