Stack栈的基础用法

stack堆栈的讲解

栈的定义及特点

堆是一个很神奇的概念,但这里并不用想得太麻烦,想像一个羽毛球桶,只有一个开口,只能从瓶口放进羽毛球或者从瓶口把【最上面】的羽毛球拿出来。也就是 stack 堆栈是一个【后进先出(Last In First Out,LIFO)】(先进后出)的数据存储结构。元素只能从栈顶入栈,只能从栈顶出栈,只能读取栈顶元素。
stack 堆栈容器的声明
需要头文件
#include

stack<T> s;                     // T 是容器内元素的变量类型

stack 堆栈容器的常用方法

s.push(e);                      //从栈顶将元素入栈,即是插入
s.pop();                        //将栈顶元素出栈,即是删除
s.top();                        //读取栈顶元素,此时栈顶元素仍然存在
s.empty();                      //判断队列是否为空,空即是true

stack 堆栈容器的操作和遍历

#include <iostream>
#include <stack>
using namespace std;
int main() {
        //定义一个空栈
        stack<int> s;

        //从栈顶入栈 3 个元素
        s.push(0);
        s.push(1);
        s.push(2);

        //读取栈顶元素
        cout << s.top() << endl;

        //将站定出战
        s.pop();
        cout << s.top() << endl;
        return 0;
}

2
1

栈的输出方式

对于一个栈,给出输入项A、B、C,如果输入项序列
由ABC组成,试给出所有可能的输出序列。

   栈状态                     产生式
A进 A出 B进 B出 C进 C出         ABC
A进 A出 B进 C进 C出 B出         ACB
A进 B进 B出 A出 C进 C出         BAC
A进 B进 B出 C进 C出 A出         BCA
A进 B进 C进 C出 B出 A出         CBA

不可能产生输出序列CAB

例题

已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值    。
	(A) i  		          (B) n-i  
	(C) n-i+1  		      (D) 不确定

答案选C。

s.base=s.top  表示空栈;
s.base=NULL 表示栈不存在;

栈的基本操作和实现

typedef int		ElemType;
typedef	int		Status;
 
typedef struct {
	ElemType	data[MaxSize+1];
	int			top;					//栈顶指针
	int			bottom;					//栈底指针
}Stack,  *pStack;
/**********************************************************/
//初始化顺序栈
Status InitStack(pStack S)
{
	S->top = S->bottom = 0;
	return OK;
}
/**********************************************************/
//压栈操作
Status Push_Stack(pStack S, ElemType e)
{
	if (MaxSize == S->top)
		return ERROR;
	S->data[++S->top] = e;
	++S->data[0];
	return OK;
}
/**********************************************************/
//输出顺序栈中所有元素
void DispStack(pStack S)
{
	int i=1;
	while (i<=S->top)
	{
		printf("%d ", S->data[i]);
		++i;
	}
}
/**********************************************************/
//出栈
Status Pop_Stack(pStack S, ElemType *e)
{
	if (S->bottom == S->top)
		return ERROR;
	*e = S->data[S->top--];
	return OK;
}
/**********************************************************/
int main(void)
{
	Stack S;
	int e;
	InitStack(&S);
	
	if (!Pop_Stack(&S, &e))
		printf("栈空");
	else
		printf("\n\n%d", e); 
	return 0;
}

栈的应用

能够解决的问题:

(1)数制转换
(2)括号匹配的检验
(3)行编辑程序问题
(4)表达式求值
(5)迷宫求解
(6)实现递归

多加练习,方能熟练掌握栈的用法。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值