精华内容
下载资源
问答
  • 进栈出栈

    2019-09-11 10:56:15
    进栈出栈情况1:全数字情况2:数字字母混合 参考 情况1:全数字 例如:已知入栈序列为:1 2 3 4 5,这5个数依次入栈,出栈顺序、时机任意。则下列可能的出栈序列不正确的是() A 1 2 3 4 5 B 3 2 1 5 4 C 1 5 4 3 ...


    参考

    情况1:全数字

    • 例如:已知入栈序列为:1 2 3 4 5,这5个数依次入栈,出栈顺序、时机任意。则下列可能的出栈序列不正确的是()
      A 1 2 3 4 5
      B 3 2 1 5 4
      C 1 5 4 3 2
      D 4 3 5 1 2
    • 规律如下:
      已知栈的输入序列是1,2,3,…,n,输出序列是a1,a2,…ai,…,an。
      然后我们任选一个数ai,并筛选ai到an之间所有<=ai的元素,则它们一定是按照从大到小的顺序排列的。*
      (“从大到小“不一定紧紧相邻,只代表相对位置关系,比如(…,10,…,7,…,3,…,1,…)
      举例:
      入栈顺序:1 2 3 4 5 【n=5】
      出栈顺序:3 2 1 5 4
      验证:
      让i=1,那么ai=3,后面小于3的有2,1。刚好3,2,1是按照从大到小的顺序排列的
      让i=2,那么ai=2,后面小于2的有1。刚好2,1是按照从大到小的顺序排列的
      让i=3,那么ai=1,后面小于1的有NULL,满足。
      让i=4,那么ai=5,后面小于5的有4。刚好5,4是按照从大到小的顺序排列的
      让i=5,那么ai=4,后面小于4的有NULL,满足。

    情况2:数字字母混合

    • 例如:n,n-1,…3,2,1
    • 解决方法:你先给它们每个元素(不管是数字还是字符串)标个序号,后面直接对序号操作就OK了【按照1,2,3,…,n的顺序】。
    展开全文
  • 函数进栈出栈问题

    2019-06-19 23:15:28
    函数进栈出栈问题: 相信大家看书的时候经常会看到函数进栈出栈的说法(有的也说是进栈弹栈),函数进栈其实就是给函数分配一块儿内存。并且先进栈的函数会先出栈,后进栈的函数会先出栈(先进后出原则)。下面有三...

    函数进栈出栈问题:

    相信大家看书的时候经常会看到函数进栈出栈的说法(有的也说是进栈弹栈),函数进栈其实就是给函数分配一块儿内存。并且先进栈的函数会先出栈,后进栈的函数会先出栈(先进后出原则)。下面有三张图片是从书上截取的,希望能帮助你理解。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 进栈出栈线性表

    2021-10-07 08:12:27
    进栈出栈的方法(线性表) #include <stdlib.h> #include <stdio.h> #include <string.h> struct lisl { int arr[60]; int size=20; int len=0; }; /*可以初始化一下,或者在结构体中初始化 ...

    进栈出栈的方法(线性表)

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    struct lisl
    {
    	int arr[60];
    	int size=20;
    	int len=0;
    };
    /*可以初始化一下,或者在结构体中初始化
    void initlisl(lisl *p)//初始化
    {	
    	p->len = 0;
    	p-> size = 60;
    }
    */
    void pushlisl(lisl *p,int data)//入栈
    {
    	if (p->len >= p->size)
    	{
    		printf("栈满");
    	}
    	else
    	{
    		p->arr[p->len++] = data;
    	}
    }
    int popshlisl(lisl *p)//出栈
    {
    	if (p->len <=0)
    	{
    		printf("没有数据");
    		return 0;
    	}
    	else
    	{
    		return p->arr[--(p->len)];
    	}
    }
    int isitlisl(lisl *p)//判断栈满还是空
    {
    	return p->len<= 0;
    }
    void main()
    {
    	int x=47;
    	struct lisl stdl;
    	initlisl(&stdl);
    	while (x!=0)
    	{
    		pushlisl(&stdl,x%2);//从右往左进行压栈
    		//x /= 2;//可以用这种方法
    		x>>= 1;//也可以这种右移二进制到0
    	}
    	while (isitlisl(&stdl) != 1)//判断栈满还是空
    	{
    		printf("%d", popshlisl(&stdl));//输出栈,是从左往右输出
    	}
    	system("pause");
    }
    

    x>>=1的作用是

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    void main()
    {
    	//移动前:0b0010
    	int x = 2;
    	printf("%d\n", x);
    	//右移动后:0b0001
    	x >>= 1;
    	printf("%d\n", x);
    	system("pause");
    }
    
    2
    1
    请按任意键继续. . .
    
    展开全文
  • 使用图形模拟数据进栈 出栈过程。基本数据结构算法实现。
  • OpenJudge进栈出栈2

    2020-03-24 22:23:43
    OpenJudge进栈出栈2 描述 1~N范围内的所有自然数按照从小到大的顺序(1,2,...,N)依次等待进栈。 比如现在N=3: 我们知道有些出栈顺序是合法的,例如{3,2,1}/{1,2,3}等 而有些出栈顺序是不可能出现(非法)的,...

    OpenJudge进栈出栈2

    描述
    1~N范围内的所有自然数按照从小到大的顺序(1,2,…,N)依次等待进栈。
    比如现在N=3:
    我们知道有些出栈顺序是合法的,例如{3,2,1}/{1,2,3}等
    而有些出栈顺序是不可能出现(非法)的,例如{3,1,2}
    现在给出1组出栈顺序,请你判断其是否合法。
    输入
    第1行包含1个整数N(1 <= N <= 20),代表元素个数。
    第2行包含N的整数,代表出栈顺序,空格隔开。
    输出
    如果非法,输出“No”;
    如果合法,输出“Yes”,以及在整个入栈/出栈过程中,栈的最大size,空格隔开

    样例输入

    样例14
    2 4 3 1
    
    样例24
    2 4 1 3
    

    样例输出

    样例1:
    Yes 3
    //*合法,过程中{1,3,4}同时在栈中时size达到最大
    
    样例2:
    No
    

    解题思路:

    根据进栈和出栈的规律,我们可以利用栈还原实际的进出栈效果。先以数组读入数据,然后按顺序构建栈。对一个个元素分别进行分析,第一个数组元素可以直接进行读取,并且利用for循环进行从1一直到该元素入栈。当是第二个元素时我们要对其与前一个元素进行比较,如果大于的话继续存入数组,小于时进行判断是否与栈顶元素相同,不同则是错误的。每个元素分析完之后就得出了正确的答案。凡是错误的在上一步直接退出。

    实现代码:

    # include <stdio.h>
    # include <stdlib.h>
    #define ElemType int 
    #define maxsize 100
    typedef struct {
        ElemType data[maxsize];
        int top;
    }SqStack;
    void InitStack(SqStack*& s)
    {
        s = (SqStack*)malloc(sizeof(SqStack));
      if(s!=NULL) s->top = -1;
    }
    
    void DestroyStack(SqStack*& s)
    {
        free(s);
    }
    
    bool StackEmpty(SqStack*& s)
    {
        return (s->top == -1);
    }
    
    bool Push(SqStack*& s, ElemType e)
    {
        if (s->top == maxsize - 1)
            return false;
    
        s->top++;
        s->data[s->top] = e;
        return true;
    }
    
    bool Pop(SqStack*& s, ElemType &e)
    {
        if (s->top == -1)
            return false;
    
        e = s->data[s->top];
        s->top--;
        return true;
    }
    
    bool GetTop(SqStack* s, ElemType &e)
    {
        if (s->top == -1)
            return false;
    
        e = s->data[s->top];
        return true;
    }
    
    int main ()
    {
       int i=0,n=0,j=0,size=0;
       int flag=1;
       SqStack*s;  InitStack(s);
       ElemType e,a[maxsize];
       scanf("%d\n",&n);
    
       for(i = 0; i < n; i++){
          if(i==n-1) scanf("%d",&a[i]);
          else scanf("%d ",&a[i]);
       }
    
       for(i = 0;i < n; i++){//代表对n各个进行分析
            
            if(i==0){
    
               for(j = 1;j <= a[i]; j++)//进栈的到第一个的位置
                   Push(s,j);
                if((s->top+1)>size) size= s->top+1;
                Pop(s,e);             //出栈第一个元素
            }
            else {
               
               if(a[i]>a[i-1]){          //如果第二个元素比前一个大,继续进栈
                  for( ; j <= a[i]; j++) //注意j是已经进栈过的数,只能累加
                     Push(s,j);
                    
                   if((s->top+1)>size) size=s->top+1;//返回栈的个数
                  Pop(s,e);
               }else if(a[i]<a[i-1]){
    
                          if(Pop(s,e)&&a[i]==e){ //判断元素与栈顶是不是一样的
                             int f=1;
                          }else{
                            flag=0;
                            printf("No\n");
                              system("pause");
                              return 0;
                          }
    
               }
    
            }
    
       }
    
       if(flag)
       printf("Yes %d\n",size);
       
    
     system("pause");
      return 0;
    
       
    
    }
    

    记得点个赞哦

    展开全文
  • 进栈出栈及遍历 文章目录进栈出栈及遍历一、栈的定义和特点二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何...
  • 停车场算法包含进栈出栈,排队等待进栈,链表,检索
  • 栈的初始化、进栈出栈、清空栈、销毁栈,dos输入输出
  • Java写的一个进栈出栈的演示程序,有界面
  • 进栈出栈问题

    千次阅读 2019-05-28 11:43:43
    一个栈的输入序列为 1 2 3 4 5, 则下列序列中不可能是栈输出的序列的是 (A) A. 5 4 1 3 2 B. 2 3 4 1 5 C....D.... ...首先 1 进栈,2 进栈+出栈, 3 进栈+出栈 ,4 进栈+出栈 , 1出栈 ,5 进栈+出栈...
  • 进栈出栈示意图

    千次阅读 2015-02-08 20:50:55
    进栈出栈示意图 12345 一次进栈 可以是54321,21543,32541等, 原理 : 后进先出,先进后出
  • 关于n个数进栈出栈的出栈序列个数问题 原题来源于洛谷:P1044 [NOIP2003 普及组] 栈 分析:一种解法是使用卡特兰数论知识,另外一种则是用递归。以下是递归做法。用dp[n][m]表示当剩余n个数未进栈,m个数在栈中时...
  • UI进栈出栈原理

    2016-04-08 15:26:21
    原文地址:UI进栈出栈原理作者:我不是怕忘了吗 [self.navigationController pushViewController:vc1 animated:YES];//首先进栈  [self addChildViewController:vc1]; // 1然后自身添加一个子视图控制器,用...
  • 输入一个计算式的字符串,通过转化后,通过进栈出栈的操作进行计算.并可以判断计算试是否正确.
  • 顺序栈的基本操作 初始化 进栈 出栈 读栈顶元素
  • 通过算法判断进栈出栈序列是否合法 代码如下: #将序列存入列表 stack = input("将序列存入列表\n") stack = stack.split(' ') print(stack) #建立一个空栈 stack1 = [] #输入序列 i = 0 while i < len(stack)+1:...
  • 栈与进栈出栈栈:是限定在栈表尾进行插入或删除的线性表,又称为后进先出(LIFO)的线性表,这个特点可以形象的表示为……(铁路调度站)只要保证每次在栈顶操作,同一进栈顺序可以有不同的出栈顺序,以下是部分出栈...
  • 输出进栈出栈的所有序列

    千次阅读 2013-06-09 09:02:58
    输出进栈出栈的所有序列   /* 输出进栈出栈的所有序列 * 如 abc 则输出可以为:cba,bac,bca,abc,acb * input 为输入字符串,output为输出字符串,保存出栈的序列,需要O(n)的空间复杂度 * stack *s 为模拟的栈 ...
  • 进栈出栈操作

    2020-10-16 01:17:54
    首先简单输入n,代表输入数字的个数,然后依次进栈,再出栈输出每个数字。 (栈是一种先进后出的数据结构) #include <iostream> #include<stack> using namespace std; int main() { stack<int>...
  • 为什么进栈操作int StackPush( SequenceStack S,ElemType x),但是出栈操作int StackPop( Sequence Stack S, ElemType d),那个为什么用d啊?就是它为什么加啊?
  • 安卓 碎片 如何实现类似 活动 栈的 进栈 出栈 碎片 的 事物管理器 内部维持了 一个双向链表结构, 可以记录每次添加的碎片和 替代的 碎片。 然后 后退的时候, 会自动 出栈。 碎片,可以容易实现 局部更新。 ...
  • //任务:判断进栈出栈序列是否合法 bool Legical(char* str) { int j=0,i=0; while (str[i]!='\0') { if (str[i] == 'I') j++; else j--; i++; if (j < 0) { //cout << j; return...
  • 进栈出栈规则

    千次阅读 多人点赞 2019-03-07 11:13:32
    已知元素的入栈顺序为abcde,则下列哪种出栈顺序是不可能的(出栈和入栈操作可交叉进行) A.edcba B.cabde C.dcbae D.bcdea 规则: 先进后出,后进先出 口诀: 在原序列中相对位置比它小的,必须是...
  • Java 进栈出栈的过程

    2020-04-09 11:32:14
    我们使用自定义的方法 StringReverserThroughStack() 来实现进栈出栈的详细过程。 完整代码 import java.io.IOException; public class StringReverserThroughStack { private String input; private String ...
  • 序列进栈出栈问题

    2021-03-25 12:02:31
    先看选项中有没有最大的出栈的,这样选的比较快,故先看B和D选项,4先出,意味着1、2、3、4都以按顺序进栈,按“后进先出”原则可知,得到的出栈顺序为4、3,2、1。故D错误,选D。 A:1进1出2进2出3进3出4进4出 B: ...
  • 进栈出栈顺序

    2019-10-23 09:34:22
    总结:先进先出,后进后出这个我知道,但是为什么一看到这个排顺序的题就不会了...原来要看第一个出栈的,那么比它先进去的必须按照顺序来。 参考:https://blog.csdn.net/qq_28379809/article/details/78065358 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,673
精华内容 16,669
关键字:

进栈出栈