进栈与出栈

问题描述:有四个元素abcd依次入初始为空的栈中,入栈之后可停留,可出栈。最后所有元素都出栈,请分析并写出所有可能的分别以a,b,c,d开头的出栈序列。

首先分析以a开头的出栈序列。序列前两位无非3种:ab,ac,ad。再分别分析这三种开头的序列分别对应着几种可能序列。

ab显然有abcd和abdc两种,ac有acbd和acdb两种,而ad只有adcb一种,因为在仅有a在栈外,bcd都在栈内的情况下,栈内从上到下的顺序只有dcb一种,这种情况比较特殊。因此以a开头的出栈序列共有abcd,abdc,acbd,acdb,adcb五种。

按照同样的方法可以得出以b开头的出栈序列有bacd,badc,bcad,bcda,bdca五种。

以c开头的出栈序列有cbad,cbda,cdba三种。

以d开头的出栈序列只有dcba一种。

原文地址:https://www.cnblogs.com/pursuiting/p/9462400.html

时间: 2024-11-04 14:24:04

进栈与出栈的相关文章

判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)

回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 2 class CharNode 3 { 4 public char Char //字符 5 { 6 get; 7 set; 8 } 9 public CharNode Next //下一节点 10 { 11 get; 12 set; 13 } 14 public CharNode(char Cha

c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

1 //c语言描述 将2进制转化为10进制 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define STACK_INIT_SIZE 20 6 #define //栈满后再分配 7 8 typedef char ElemType; 9 typedef struct 10 { 11 ElemType *base; //栈底 12 ElemType *top; //栈底 13 int s

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置.通常以top=-1表示空栈. 代码如下: #include<iostream> using namespace std; #define  TRUE 1 #define  FALSE 0 //顺序栈的存储结构 #define Stack_Size 50 //设栈中元素个数为50 typedef struct { int elem

多栈共享技术,双端栈的初始化、进栈、出栈操作

栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况.若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出.有的栈空间还很空闲的情况.为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术. 在顺序栈的共享技术中,最常用的是两个栈的共享技术,即双端栈.它主要利用了栈的栈底位置不变,而栈顶位置动态变化的特性. 实现代码如下: #include<iostream> using namespace std; #d

顺序栈的进栈,出栈

1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAX 100 4 5 typedef struct 6 { 7 char c[MAX]; 8 int top; 9 }*seqstack; 10 11 void InitStack(seqstack s);//建立一个空栈 12 int push(seqstack s,char a);//进栈 13 int pop(seqstack s,char *a);//出栈 14 15 i

进栈和出栈

栈(stack)和队列(queue): 其实都是普通数组,只不过调用了不同API而已 栈: 一端封闭,只能从另一端进出的数组 FILO 何时使用: 希望始终使用最新进入数组的元素时 如何使用: 1. 从结尾出入栈 入栈(压栈): arr.push(值1,值2,...) 不支持数组参数 出栈(弹栈): var last=arr.pop(); 好处: 无论出入栈都不改变剩余元素的位置 2. 从开头出入栈 入栈: arr.unshift(值1,值2,...) unshift入栈的顺序值从右向左读取参数

c++实现两个元素进栈和出栈的顺序

1.在数据结构的书中大多是伪代码,没有给出一个完整的程序,在此小编给大家一个完整的简单的入栈出栈操作. 2.实现的功能是:观察两个数的入栈和出栈顺序. 3.程序和代码: #include<iostream> #include<stdlib.h> using namespace std; struct Stack{ int* base; int top; int stack_size; }; int IniStack(Stack &s,int size){ s.base=(i

进栈出栈的合法性检查

栈与进栈出栈 栈:是限定在栈表尾进行插入或删除的线性表,又称为后进先出(LIFO)的线性表,这个特点可以形象的表示为--(铁路调度站) 只要保证每次在栈顶操作,同一进栈顺序可以有不同的出栈顺序,以下是部分出栈顺序 34521   25431  14532 32145    43215 那么究竟怎样验证一个出栈序列与一个入栈序列匹配? 思路:将进栈和出栈序列分别存在数组里,然后再创建一个辅助栈,把输入序列中的元素依次压入栈中,并按照出栈序列依次弹出. 将进栈和出栈序列存在两个数组里,然后再创建一个

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点