数据结构——关于栈的一些认识

       栈是数据结构中最常见的一种类型之一,其存储数据的方式为“先进后出”。即在时间轴前端压入的数据会被放置到存储柱的底部,并随时间后移将数据依次往上堆放;反之,弹出时,先出栈的为置于存储柱顶端的数据,后依次往下弹出。这样一来,本次弹出的数据总为上一次压入的数据,一压一弹的对称操作,可以达到”局部时间反演“的作用,固其也就成为了完成”现场保护与恢复“的最佳工具。

       从数据传输端口来说,入口与出口为同一个且唯一,即与外界交互的接口只有一个,避免了外界直接从数据串中部(或其他地方)访问,牺牲端口数量以最大化存储的安全性,保证了数据的不变与有序。因此,在多线程的环境中,为了保证线程同步,对端口操作加锁是十分必要的。

       从其结构体(c语言)来说,常见的有数据串指针型、链表型等:

typedef struct Stack //指针型
{
datatype * data; //指向存储的数据(可用malloc申请)
int top; //当前栈顶的下标
int max; //当前可存储的最大数量
}stack;


typedef struct Note //链表型
{
 struct Note *next;
 ITYPE data;
}note;
typedef struct List
{
 note *head;
}list;


       关于栈的基本操作函数有:

Init_Stack(); //初始化栈

Extend_Stack(); //拓展栈

Judge_Empty(); //判空(当前已存入数量)

Push_Stack(); //压入数据

Pop_Stack(); //弹出数据

Top_Stack(); //取栈顶(不弹出)

Clear_Stack(); //清空栈


       在实际应用层面,栈往往处理“当前数据或即时操作仅与上一个记录的数据有关”的问题(类马尔科夫?)。例如:寻找迷宫路径(记录来时的方向)、表达式的计算(记录上一个数字及运算符)等等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值