精华内容
参与话题
问答
  • 进栈出栈规则

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

     先弄个例子:

    已知元素的入栈顺序为abcde,则下列哪种出栈顺序是不可能的(出栈和入栈操作可交叉进行)

    A.edcba

    B.cabde

    C.dcbae

    D.bcdea

    规则:

    先进后出,后进先出

     

    口诀:

    在原序列中相对位置比它小的,必须是逆序;

    在原序列中相对位置比它大的,顺序没有要求;

    以上两点可以间插进行。

     

    分析:

    A选项正确: 比e小的有 abcd,根据后进先出,则edcba ,

    B选项错误: 比c小的是ab,必须逆序,则结果cabXX,肯定是错误的。

    C选项正确:比d小的abc,必须逆序,则结果是dcba补上a

    D选项正确:比b小的是a,逆序等于还是a,

                         然后对比第二位,比c小的ab,因为b已经排了,则还是a

                         然后对比第三位,比d小的abc,因为bc已经排了,则还是a

                         然后对比第四位,比e小的abcd,因为bcd已经排了,则还是a

    展开全文
  • 出栈序列(c语言)

    2013-11-26 16:31:46
    给定一个整数栈,已知进栈序列,判断某整数序列是否为合法的出栈序列。 【输入形式】 从标准输入读取一个整数N(3≤N≤10),表示进栈序列为1 2 3 …… N。再读取N个整数,表示待测整数序列。 【输出...
  • seid=6709590585276522157 一 算法: 栈: 数据进出,类向箱子放东西和拿东西,先进后出,或者说后进先出。栈分为静态栈和动态栈两种,静态栈用数组实现, ...算法 出栈 入栈(压栈),遍历,清空。 1.创建栈 ...

     

    数据结构 的学习视频 https://www.bilibili.com/video/av6159200?from=search&seid=6709590585276522157

    一 算法:

    栈: 数据进出,类向箱子放东西和拿东西,先进后出,或者说后进先出。栈分为静态栈和动态栈两种,静态栈用数组实现,

    动态栈用链表实现。算法  出栈 入栈(压栈),遍历,清空。

    1.创建栈

    栈包括栈顶指针和栈底指针。 栈顶指针存放,栈顶元素地址,栈底指针存放栈底元素地址。

    typedef struct Stack
    {
        PNODE pTop;//栈顶指针 
        PNODE pBottom;//栈底指针 
    } STACK,* PSTACK; 

    2.入栈

    入栈分为三步。第一新建一个节点。第二步,新建节点的指针域指向栈顶。第三步将栈顶指向新建节点。

    void push(PSTACK pS,int val )
    {
        PNODE pNew=(PNODE)malloc (sizeof (NODE));
        pNew->data=val;
        pNew->pNext= pS->pTop;//新建节点指针域指向栈顶值 ,不能写pS->butttom;
        pS->pTop = pNew ;           //更新栈顶指针 ,指向新节点 
        return;
     } 

    3.出栈

     

    1. 创建一个数据节点的指针,保存栈顶地址。2然后栈顶指针指向栈顶的下一位置的地址

    3.释放栈顶

     

     

     

    void push(PSTACK pS,int val )
    {
        PNODE pNew=(PNODE)malloc (sizeof (NODE));
        pNew->data=val;
        pNew->pNext= pS->pTop;//新建节点指针域指向栈顶值 ,不能写pS->butttom;
        pS->pTop = pNew ;           //更新栈顶指针 ,指向新节点 
        return;
     } 

     

     

    4.创建两个指针p,q,一个指向栈顶,一个指向栈顶的下一位置。滑动清空

     

    只是删除数据元素,表还在。

     void clear(PSTACK pS)

     {

      if(empty(pS))

     { return ;

      }

    else

    {

     PNODE p=pS->pTop;

     PNODE q=NULL;

     while(p!=pS->pBottom) //往下滑动删除  

     {

        q=p->pNext;//q指向下一个节点

      free(p);

      p=q;//更新

      }

      pS->pTop=pS->pBottom;//清空完成

    }

      }

    二 程序

    include"stdio.h" 

    #include"stdlib.h"
    #include"malloc.h"
    typedef struct Node //数据节点 
    {
        int data;
        struct Node *pNext;
        
    }NODE,* PNODE;
    typedef struct Stack
    {
        PNODE pTop;//栈顶指针 
        PNODE pBottom;//栈底指针 
    } STACK,* PSTACK;
    void init(PSTACK);//需要传入结构体指针 ,否则不改变结构体内元素的值 
    void push(PSTACK ,int);//第一个参数 向那个栈中压入元素,第二个是要压得值 
    void traverse(PSTACK);//传入参数是栈指针 
    bool pop(PSTACK,int *);//出栈 
    void clear(PSTACK pS);//清空栈 
    bool empty(PSTACK pS);//栈是否为空 
    int main()
    {
         STACK S;//STACK 
         int a;
         init(&S);//造出一个空栈 
         push(&S,1);//压元素  
         push(&S,2); //压元素 
         push(&S,3); //压元素 
         push(&S,4); //压元素 
         push(&S,5); //压元素
         push(&S,6); //压元素 
         traverse(&S);//遍历 
         if(pop(&S,&a)) //进行一次出栈 
         {
             printf("出栈成功,出栈的元素是%d\n",a);
         }
         else 
         {
             printf("出栈失败\n"); 
         }
          traverse(&S);//遍历 
           clear(&S);//清空栈 
          if(empty(&S))
             {
                 printf("栈被清空\n"); 
                  }     
        return 0;
    }
    void push(PSTACK pS,int val )
    {
        PNODE pNew=(PNODE)malloc (sizeof (NODE));
        pNew->data=val;
        pNew->pNext= pS->pTop;//新建节点指针域指向栈顶值 ,不能写pS->butttom;
        pS->pTop = pNew ;           //更新栈顶指针 ,指向新节点 
        return;
     } 
     /*造出一个空栈 
     */
    void init (PSTACK pS) //S的地址付给pS 
    {
        pS->pTop=(PNODE)malloc(sizeof(NODE));
        if (NULL==pS->pTop)
        {
            printf("动态内存分配失败!\n");
            exit(-1);
        }
        pS->pBottom=pS->pTop;//指向第一个节点
        pS->pTop->pNext=NULL;// pS->pBottom->pNext=NULL清空指针区域 
    }
    /*遍历栈*/ 
    void traverse(PSTACK pS)
    {
        PNODE p=pS->pTop;  //找人先找地址,即找数据先找指针。 
        while(p!=pS->pBottom) 
        {
            printf("%d ",p->data);
            p=p->pNext;
        }
        printf("\n");
        return ;
    }
    bool empty(PSTACK pS)
    {   if (pS->pTop==pS->pBottom)
          return true;
        else 
            return false;
     } 
    /*把pS所指向的栈出栈一次,并把出栈的元素存入pVal
    形参所指向的变量中,如果出栈失败,则返回false; */
    bool pop(PSTACK pS,int *pVal)
    {
        if(empty(pS)) //栈空出栈失败,不能写成&pS,pS存放的本身就是s的地址 
            {
                return false;
            }
         else 
         {
             PNODE r=pS->pTop;
             *pVal= r->data;
             pS->pTop=r->pNext;//和下句的free次序不能变,变得化,会找不到栈顶。 
             free(r);
             r=NULL;
             return true;
         }    
     } 
     
     //只是删除数据元素,表还在。 
     void clear(PSTACK pS)
     {
         if(empty(pS))
         { return ;
          } 
        else 
        {
             PNODE p=pS->pTop;
             PNODE q=NULL;
             while(p!=pS->pBottom) //往下滑动删除  
             { 
                q=p->pNext;//q指向下一个节点 
                 free(p);
                 p=q;//更新 
              } 
              pS->pTop=pS->pBottom;//清空完成 
       

     

    三 程序的运行结果

     

    展开全文
  • 通俗讲解入栈、出栈(C语言)

    万次阅读 多人点赞 2015-12-17 10:36:27
    **解释入栈出栈原理:栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或者...

    **

    解释入栈出栈原理:

    栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或者放底下吧(除非你很无聊 很寂寞 闲的蛋疼了 先一根根把堆在上面的全部拿出来 然后把要放进去的那根放上去 最后又把刚才搬下来的有重新搬上去……此处省去几万字)所以要往上面加东西的时候,就得放在最上面。
    以上就是进栈的原理,怎么出栈呢,很简单,直接从”积木”的最顶端取下来就行了。
    ok,以上比喻完了,希望你能看得明白。接下来讲程序不说积木了:),由上面的分析 我们可以知道一个道理,对于栈的操作,栈顶的元素很重要(也就是积木最上面的那根)。为什么呢。无论是出栈还是进栈,都跟那哥们有直接的联系。你想啊,如果要是有元素要进栈的话,那么它就不能当“老顶”了,那老顶之位就要交给压在它上头那位了;如果出栈呢,它也不能当老顶了,老顶之位就要交到原来压在它底下的那个。
    ok,所以一般的栈都将栈顶的那个元素所在的位置(内存地址–数组类型的,或者指针—节点类型的)视为栈的栈顶~!通过它来对栈进出进行操作。
    一般来说(或者在我出生以来看到过的)栈有两种内存结构(注意是是内存结构,有的书说是存储结构,都一样一样滴),一种是连续的,一种是不连续的,连续的基本上就是数组了,不连续的基本上就是链表类型的啦。你上面的程序就是链表类型的,每个节点都有个指针指向它“底下”的节点(我觉得“底下”比下一个更容易理解)。通过这种你链我 我链它的方式,把一组数据连在一起。

    入栈、出栈原来的程序代码:

    **

    int Push(STACK *S,int e)//进栈
    {
      SNode *p;
      p=(SNode *)malloc(sizeof(SNode));
      if(!p)
       return ERROR;
      p->data=e;
      p->next=S->top;
      S->top=p;
      S->length++;
      return OK;
    }
    
    int Pop(STACK *S,int *e)//出栈
    {
      SNode *p;
      if(S->top==NULL) return ERROR;
      p=S->top;
      *e=p->data;
      S->top=p->next;
      S->length--;
      return OK;
    }

    分析代码:

    进栈:
    int Push(STACK *S,int e)//进栈
    {
    SNode *p; //step1:这个编程习惯不好,没定义一个指针就应该把它指向NULL
    p=(SNode *)malloc(sizeof(SNode)); //step2:为你的节点分配内存
    if(!p)
    return ERROR;
    p->data=e; //step3:当然了,你那个传进来的e是相当于temp,用来传值的,ok,那就把它的 数据给p咯,p实际指向的是一块内存块,用来装节点的
    p->next=S->top; //step4:回到上面积木问题,进栈的时候,原来的老顶要给新来的让位,但是如果这时候的top节点直接赋给新来的元素的话,那么那个原来的老顶是不是从此以后都找不到它了?所以,先把新来的元素的next指针指向当前的老顶,这样的话,以后通过next指针就可以找到它了。
    S->top=p; //当然,都已经处理好以前老顶的身后事了(就是以后可以通过p的next指针找到它了)那么“让位”就可以进行了,这时,p便戴上了 老顶 之帽了
    S->length++; //既然人数都增加了,那就到公安局登记入户口吧
    return OK; //一切over,现在这个栈stack的栈顶位置就是你刚才新加进来的p了,通过stock.top指针就可以访问到栈顶,然后出栈也是同理的,ok,all over
    }。

    图示:

    这里写图片描述

    展开全文
  • 出栈入栈问题

    千次阅读 2018-03-29 18:45:21
    进栈、出栈多是按照一定顺序的例如:有一个数列(23,45,3,7,3,945)我们先对其进行进栈操作,则进栈顺序为:23,45,3,7,3,945(放盒子)我们在对其进行出栈操作,则出栈顺序为:945,3,7,3,45,23(盒子中...
    基本概念:
    多用于计算机,与其相对应的是进栈;进栈、出栈多是按照一定顺序的
    例如:有一个数列(23,45,3,7,3,945)
    我们先对其进行进栈操作,则进栈顺序为:23,45,3,7,3,945(放盒子)
    我们在对其进行出栈操作,则出栈顺序为:945,3,7,3,45,23(盒子中拿)
    为了方便,我们通常做到:出栈后不再进栈。
    进栈出栈就像一个盒子,先一个个放入盒内,而拿出的时候只有先从上面拿,才能再拿下面。
    栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
    -------------------

    示例:

    1进栈,1出栈,2进栈,2出栈,3进栈,3出栈,所以是123
    1进栈,2进栈,2出栈,1出栈,3进栈,3出栈,所以是213
    1进栈,2进栈,2出栈,3进栈,3出栈,1出栈,所以是231
    1进栈,2进栈,3进栈,3出栈,2出栈,1出栈,所以是321
    输入序列是123的输出序列就这4中情况;
    输入序列是12345的输出序列是12345  12435  12453  12543  21345  21435  21543  23451  23541   24531  25431  32451  32541  34521  35421   43215  43251  43521   45321  54321;
    为什么出栈顺序没有31...   42...? 当3先出的时候,1和2已经在栈里了结合已知的进栈顺序,1不可能比2先出来


    一个栈的输入序列是12345,则下列序列中不可能是栈的输出序列的是( )

    A.23415 
    B.54132
    C.23145 

    D.15432

    B 不可能 5第一个只能为54321

    展开全文
  • 入栈出栈代码实现以及相关例题

    万次阅读 2018-07-25 16:00:24
    了解更多栈的知识,请点击  #include<stdio.h> #include<iostream> typedef struct node{ int date; node * next; }SeqStack ; SeqStack * init_SeqStack(SeqStack * ...int is_Em...
  • 函数入栈出栈以及栈帧

    千次阅读 2018-05-31 00:04:50
    参考一函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数调用的过程进行分析。一、堆和栈首先要清楚的是程序对内存的使用分为以下几个区:l 栈区(stack):由编译器自动分配和释放,存放...
  • 出栈入栈顺序规律

    万次阅读 多人点赞 2018-09-18 09:45:49
    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...  技术之瞳 阿里巴巴技术笔试心得习题2.65:  一个栈的入栈序列为ABCDEF,则不可能的出...
  • 出栈顺序问题

    千次阅读 2017-10-22 23:03:43
    大家好,初次见面。 那么,让我们先来看一下题目。 题目描述 n列火车按照1,2,3… …n的顺序进站,那么出站的顺序可能是下面的序列吗,如果能输出Yes,否则输出No 输入 第一行一个整数n(n) ...
  • 顺序栈,即用顺序表实现栈存储结构。通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数据的基本操作(出栈和入栈)&...
  • 实现顺序栈的初始化、入栈和出栈操作

    万次阅读 多人点赞 2018-05-04 09:49:59
    编写一个程序实现顺序栈的初始化、入栈和出栈操作; //方案1 # include<stdlib.h> #include<iostream> using namespace std; # define ...
  • 顺序栈出栈出错,调试了好久,未果,求解惑!谢谢大家! #include "stdafx.h" #include using namespace std; typedef int ElemType; extern void Error(char * s); enum Status { OK, ERROR, ...
  • 文章目录一,栈的定义二,顺序栈 一,栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表 允许插入和删除的一端称为栈顶,另一端称为栈底。不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称...
  • #include using namespace std; /*顺序栈的定义*/ #define Stack_Size 100 typedef struct sqStack { char *elem; int top; int st
  • 编写程序,实现顺序栈的创建、进栈和出栈等基本操作算法。 (1) 创建包含任意个元素的顺序栈。 (2) 进栈一个任意元素。 (3) 出栈一个任意元素。 (4) 取栈顶元素并输出。 *(5) 删除栈中值为给定值的元素。 ...
  • 顺序栈的 进栈出栈

    2019-10-20 13:57:05
    注意 :我在这里尝试了多种操作,实际使用时应该适当删除一些代码 #define _CRT_SECURE_NO_WARNINGS 1 #include"stdio.h" #include “windows.h” #define MAXSIZE 20 ...//定义的框架 typedef ...
  • 使用的开发工具CLionCLion 2017.2.1 Build #CL-172.3544.40, built on August 2, 2017Licensed to CLion EvaluatorExpiration date: September 15, 2017JRE: 1.8.0_152-release-915-b6 x86_64JVM: OpenJDK 64-Bit ...
  • C语言实现顺序栈的创建和操作(进栈,出栈,打印等等) 往期文章地址: C语言实现顺序表的创建及基本操作 C语言实现单链表的创建及基本操作 本来我在上次的文章结尾说下一篇我想写循环链表的,今天翻开课本仔细看了...
  • 顺序栈的创建、入栈、出栈

    千次阅读 2014-05-25 20:49:15
    存储结构为顺序
  • 顺序栈的基本操作1 . 顺序栈的定义2 . 初始化new和exit的用法new的用法:exit的用法:3 . 入栈(压栈)4 . 出栈5 . 取栈顶元素四 . 链栈的基本操作1 . 链栈的定义2 . 初始化3 . 入栈4 . 出栈5 . 取栈顶元素五 . ...
  • /顺序栈的实现/ /***顺序栈的实现***/ #include<iostream> #include<fstream> using namespace std; //顺序栈定义 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100//顺序栈...
  • 顺序栈的进栈、出栈操作

    千次阅读 2016-11-06 19:07:49
    /***************************************************** copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name: Author:Jerey_Jobs Version:0.1 Date: Description:顺序栈 Funcion List: ***
  • 来一张图来理解栈 #define Max_size 100//设置栈的最大空间 typedef struct stack { int* base;//栈底指针 ...2.初始化顺序栈 int initStack(Sqstack& s)//初始化栈表 { s.base = (int*)mallo...
  • #include<stdio.h> #define m 100 typedef struct { int stack[m]; int top; }qstype; void initials(int &top) //初始化一个堆栈 { top=-1; } int emptys(int top) //判断是否为空 ...=-1 -&g.
  • 顺序栈的入栈、出栈算法

    千次阅读 2019-11-25 23:38:09
    #include<stdio.h> #include<stdlib.h> int stack[10]; //stack堆 int top = 0; //栈顶指针top,指向实际栈顶后的空位置,初值为0 void push(int x); int pop(void);... i++) //入栈...
  • 顺序栈的结构定义为: #define M 100 //栈的空间 typedef struct  { int data[M]; int top;  } SqStack; 试写出SqStack的初始化函数、入栈函数和出栈函数 。并在main()函数中测试上述函数。 #include #...
  • /*顺序表实现的一系列操作*/ #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define Stack_Size 50 //设中元素个数为50 #define OK 1 #define ERROR 0 typedef struct { int elem...
  • 顺序栈 栈的抽象数据类型 ADT 栈(stack) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁它 ...
  • 栈:是一种特殊的线性存储数据结构,分为顺序栈和链式栈,其特点是“先进后出”,类似于箱子。栈底元素保持不变,对栈中元素的删除(出栈)和插入(压栈)操作只能在栈顶进行操作。 栈的结构定义: typedef struct ...
  • 数据结构顺序栈的入栈与出栈

    千次阅读 多人点赞 2017-11-24 13:48:07
    数据结构顺序栈的入栈与出栈 #include #include  #define MaxSize 100 typedef int ElemType; typedef struct {  ElemType data[MaxSize];  int top; } SqStack;   //进桟 /*已知变量:初始化的栈,数组,...

空空如也

1 2 3 4 5 ... 20
收藏数 424,676
精华内容 169,870
关键字:

出栈