栈——手搓のstack

目录

         前言

1.物理结构

2.需要实现的功能

3.初始化

4.销毁

5.入栈

6.出栈

7.判空

8.取栈顶元素

9.元素个数

10.测试

总结


前言:

本篇将进入到数据结构中的栈,命名风格及实现偏向stl中的stack,后面与之相对的还有队列,将在下一篇介绍。

1.物理结构

栈和队列的存储结构都很简单,主要看你怎么实现:

再结合官方文档:

栈的结构就浮现出来了:遵循后进先出的理念,入栈或称压栈时放到栈底,计top为栈顶元素,每进一个元素top就++,但是栈实际还是对数组的管理,所以top作为下标,并在开始初始化为0,就代表着如果入栈一个元素,top就是1,但是top是指向栈顶元素的下一个,但这个1就代表着是1个元素,当然如果想让top更符合1就是指向栈顶元素的话,就可以初始化为-1,本篇采用初始化为0的写法。

2.需要实现的功能

1.封装为结构体,top是栈顶元素,capacity为容量。

2.需要实现初始化,插入,删除,取栈顶元素,判空,判断大小,销毁。

3.初始化

1.要对pst解引用,需要断言不能为空。

2.top为0要表示没有元素,那进一个元素top++,而top又是下标,top为1就指向栈顶元素的下一个,也可以让top初始化为-1,区别在下方解释。

4.销毁

释放掉栈,置空ing,容量和栈顶元素下标都置0即可。

5.入栈

1.入栈开始如果开始栈顶元素的下一个的下标与容量相等,就需要扩容,其实就是没有元素的时候,扩为4,如果再来判断相等就是容量不够扩2倍。

2.新扩的空间给pst->q,容量换完新的容量,这里没有用malloc扩容是因为,开始pst->a为空其实也就是malloc了。

3.扩容好后插入元素,由于top开始是0,那正好就是代表放入第一个元素,然后再++top,此时就代表top指向栈顶元素的下一个,但是top是数值也代表容量,后面size的实现就需要top的值,如果初始化为-1,就要先++top此时top为0插入第一个元素,并且top也指向栈顶元素,但是不同的是,其他函数也要跟着变,实现哪一个都行。

6.出栈

虽然top--后还是top还是能访问栈顶的下一个元素,但是由于初始化时top为0就代表没有元素了,所以top--就认为是出栈,为空不能出栈。

7.判空

栈顶没有元素栈底当然有没有,就是空。

8.取栈顶元素

top指向栈顶元素的下一个,-1就是栈顶元素的下标。

9.元素个数

top就代表元素个数,同时也是栈顶元素的下一个的下标。

10.测试

总结:栈的实现并不难,只要遵循后进先出即可,后面c++也不会直接使用栈的时候去手写一个,但是底层实现要理解。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值