数据结构基础之栈

本文详细介绍了栈的基本特点及其在深入优先搜索中的应用,并提供了一个简单的栈实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构之栈结构:

1.  栈的特点:

相比于一个普通的数组,栈控制了操作的方法,元素只能在栈顶入栈,也只能在栈顶出栈。

2.  栈的用途:

在深入优先搜索(DFS)中会用到,比如现在有一个图如下:

现在要从A出发要遍历整张图,那么首先看与A相连的B、D,任选一个,比如B,那么要先保存A,将其压入栈,然后遍历B,B又到C,然后C没有其余的路径就可以返回了,取出栈顶的元素B,B也没有其余路径,再取出栈顶元素A,现在A可以走D,那么D压入栈,走E,返回到D,再返回到A,现在A是出发点,又没有其余路径,那么说明整张图都遍历完全。

 

访问顺序为:A->B->C->B->A->D->E->D->A  (大致如此)

在这个搜索中,栈的作用便可以很清晰的看到。

在程序设计中,深入优先搜索是很重要的一种算法,也很常见,经典的迷宫找出路问题就要用到它。

3.  栈的写法:

如果自己手写栈的模板的话,可以封装成一个结构体或者类,首先要有元素本体、入栈操作、出栈操作、取栈顶元素,这三个是最基本的。比如我要建一个int类型的栈的话,那么可以封装如下:

 

 1 typedef struct
 2 { 
 3   int st[1000];       //栈里面的元素
 4   int top;            //栈顶,最初栈里面没有东西,可以设置为0
 5   bool push(int data) //入栈操作
 6   {
 7     if(top>=1000)     //表示栈已经被装满了
 8     {
 9       printf("栈满!\n");
10       return false;   //返回0表示没有入栈成功
11     }
12     st[top++]=data;
13     return true;
14   }
15   bool pop()          //出栈,即将现在栈顶的那个元素舍去
16   {
17     if(top==0)        //表示栈空
18     {
19       printf("栈空!\n");
20       return false;
21     }
22     top--;
23   }
24   int front()         //取栈头元素
25   {
26     return st[top-1];
27   }
28 }Stack; 

 

 

 

如果在一些程序设计比赛,比如acm中,一般不会进行栈的封装,要么直接调用STL,要么简略写下就可以了,如下:

int st[1000],top=0;

入栈:st[top++]=data;

出栈:data=st[--top];

4.  对于栈的说明

与队列一样,都是数据结构最最基础的一块,要熟练掌握,同时了解一下他的特殊用法,比如单调栈等。

转载于:https://www.cnblogs.com/hchlqlz-oj-mrj/p/5065138.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值