精华内容
下载资源
问答
  • 代码详解(初始化栈、清空栈、进栈、出栈、判断栈为空为满,将二进制结果取出)
    万次阅读
    2018-08-01 16:31:27

    栈:是一种思想,实现将数据以先进后出(FILO:first in last out)方式操作

    一、模型:井口

    二、数据类型:
            //宏:
            #define MAXSIZE  10
            //重命名:将int取一个别名:StackType
            typedef int StackType;
            //栈的类型:
            struct stack
            {
            //数据:
                    StackType buf[6];       //栈的元素
            //方法
                    short top;              //栈顶下标
            };
      三、功能:
        1、初始化InitStack
        2、清空栈:ClearStack
        3、出栈:pop
        4、进栈:push
        5、判断栈为满:IsFull
        6、判断栈为空:IsEmpty
        7、取次栈顶
        8、栈的元素个数:StackLength

    四、栈的应用:撤消与恢复,记忆,递归,高级功能计算

     

    栈的代码详解、将二进制结果取出,实现代码如下

    #include<stdio.h>
    //宏
    #define MAXSIZE 32
    #define FALSE 0
    #define TRUE 1
    //重命名:将char取一个别名:StackType
    typedef char StackType;
    typedef char BOOL;
    //栈的类型;
    struct st
    {
    //数据
    	StackType buf[MAXSIZE];//栈的元素
    //方法
    	short top;//栈顶下标
    };
    //重命名:
    typedef struct st stack;//将struct stde 类型取别:stack
    
    /*功能:初始化栈
     *函数名:InitStack
     *返回值:void
     */
    void InitStack(stack *p)
    {
    	p->top=-1;
    }
    
    /*功能:判断栈为满
     *函数名:IsFull
     *返回值:为满——真1,非满——假0
     */
    BOOL IsFull(stack *p)
    {
    	if(MAXSIZE-1==p->top)
    	{
    		return TRUE;
    	}else
    	{
    		return FALSE;
    	}
    }
    
    /*功能:判断栈为空
     * 函数名:IsEmpty
     *返回值:为空——真1,非空——假0
     */
    BOOL IsEmpty(stack *p)
    {
    	if(-1==p->top)
    	{
    		return TRUE;
    	}else
    	{
    		return FALSE;
    	}
    }
    /*功能:进栈
     *函数名:push
     *返回值:成功TRUN 失败FALSE
     *注:不能为满,否则进栈失败
     */
    BOOL push(stack *p,StackType data)//p=&s
    {
    //判断栈是否为满
    	if(TRUE==IsFull(p))//为满
    	{
    		return FALSE;//返回失败
    	}
    	p->buf[++p->top]=data;
    	return TRUE;//返回成功
    }
    /*功能:出栈
     *函数名:pop
     *返回值:出栈成功TRUE 失败FALSE
     */
    BOOL pop(stack *p,StackType *pd)
    {
    //判断是否为空,为空出栈无意义
    	if(TRUE==IsEmpty(p))
    	{
    		return FALSE;//出栈失败
    	}
    	*pd=p->buf[p->top--];//优先级->大于--
    	return TRUE;//出栈成功
    }
    void main()
    {
    //定义变量:类型 变量名
    //struct st s;
    	struct st s;//分配空间
    	//初始化
    	InitStack(&s);
    	int num=0;
    	printf("请输入");
    	scanf("%d",&num);
    	//求二进制
    	while(num!=0)
    	{
    	//将余数入栈
    		if(FALSE==push(&s,num%2))
    		{
    			return;//结束
    		}
    		num/=2;
    	}
    	//将二进制结果取出来
    	char value=0;
    	while(FALSE!=pop(&s,&value))
    	{
    		printf("%d",value);
    	}
    	printf("\n");
    }

     

    更多相关内容
  • (公众号原文)概念问题:C语言是一种定义类型的语言,也就是说我们每次使用一中数据类型,我们需要先进行类型和变量定义,才能进行使用。...温馨提示:上述概念问题不能理解的同学,即将面临头脑风暴的基本操...

    624433f5e063b2e0b34f912e6e299d85.png

    (公众号原文)

    概念问题:

    C语言是一种定义类型的语言,也就是说我们每次使用一中数据类型,我们需要先进行类型和变量定义,才能进行使用。例如:

    a4e91e1ecace9176d4afd468d751272f.png

    在定义这个int类型中,类型int并不占用空间,变量a占用系统所分配的4个字节大小的空间。

    因此,在结构体变量定义中,如

    8fdf2149eb25f2c92a7f1948645063c7.png

    在定义类型时,系统并未分配空间,只有定义一个类型变量,系统才会分配相应大小的空间。

    温馨提示:

    上述概念问题不能理解的同学,即将面临头脑风暴

    栈的基本操作:

    b324a1d69de6b8ae7d0eafac3021d1a9.png

    (以下内容,只贴栈的初始化代码。。。。)

    No.1

    结构体类型定义:

    8fdf2149eb25f2c92a7f1948645063c7.png

    方法①

    初始化:

    daaaa4244d2ddbfd11535d05c4f0b2bf.png

    主函数:

    325fd45b8a4ea2c9a6181d217709f30b.png

    方法②

    初始化:

    04bb61c4849386306ff4ba3677208863.png

    主函数:

    6b2ba38af62c27ed5b76cdbea671f91b.png

    对比分析:

    方法①:

    在初始化栈时,只需要操作S-top=-1

    因为在主函数中,我们已经定义了一个普通变量S

    普通变量一经定义,系统便会分配一个结构体类型大小存储空间,在初始化栈时,我们传入的参数是相应空间的地址.

    因此在初始化时,只需要对S-top操作。

    方法②:

    在方法②定义的结构体变量是一个指针变量

    指针变量指向的是一个空间的地址

    定义指针变量的时候,系统并不会分配空间

    因此,在初始化栈的时候,依然需要动态申请空间。

    注意:

    初始化函数(SqStack *Init_Stack())中定义的也是一个指针变量,而且该初始化函数是一个指针函数,返回指针S

    主函数中的指针变量S用来接受初始化函数所返回的指针

    由于主函数中变量为指针类型,后面函数的调用,传值的方式也不一样。

    No.2

    结构体类型定义:

    68eeaeb1d2e956a043d575e69cb74f6f.png

    方法①

    初始化:

    2583053f66b17d222183a0a59c011074.png

    (MAXSIZE已经进行宏定义)

    主函数:

    e8570aa45385a306a55fc7024a687187.png

    方法②

    初始化:

    9a4a6cb91b1d0cb806ab07c2df91f7ed.png

    主函数:

    085a4e2a3daac9fb900d771209370519.png

    方法①:

    这里在主函数中定义的变量是一个普通变量,系统会自动给这个结构体变量分配一个相应大小的空间。

    但为什么在初始化栈的时候,我们依然要分配一个空间呢?

    注意

    在初始化函数中,系统分配空间的目标对象不再一样!!!

    我们可以和第一种结构定义类型中的方法①对比

    c6138416483a7924dbee963149694648.png
    • 左边对应第二种结构定义:

    SElemType *data 是一个指针地址(基地址),它指向一个空间地址,但系统不对其分配空间

    在主函数中,定义了一个结构体变量S,系统对该结构体分配了空间,但SElemType *data这个数据项是一个指针并且在结构体S里面

    因此初始化时,要对这个及地址分配空间,date也就形成了动态数组的数组名,其后面的操作跟数组一样。

    右边对应第一种结构定义:

    我们学过数组知道:

    SelemType data[MAXSIZE]这个操作就是一个静态数组的定义

    系统会就给这个数组分配一个相应大小的空间

    因此,在初始化函数时,不再需要对data[MAXSIZE]这个数组分配空间。

    方法②:

    在这个方法的初始化中,主函数定义的是一个指针类型变量S,S指向一个地址,系统不分配空间

    在初始化栈的时候

    首先给SqStack *S这个基地址动态申请一个空间,再对 SElemType *data 动态申请一个空间

    SElemType *data 是在结构体中的数据项

    如果先不对SqStack *S申请一个空间,指针变量S所指向得空间,因此程序会报错。

    No.3

    结构体类型定义:

    2861b220453166bb8419b195c34deb5b.png

    在这种结构类型定义中,在栈进行初始化得时候,基本操作与上述第二种方式基本一样

    但在分配空间得时候,只需要对基地址base分配一个空间,然后再用让top指向base.

    而不需要对两个基地址都分配空间。

    最后

    建议在这个类型定义的基础下

    写一写栈的基本操作

    避免眼高手低

    展开全文
  • 点击图片上方蓝字字体"算法简堂"即可订阅——顺序1 大家都有将物品收纳进盒子里的经历,也一定有先放进去的物品需要在最后才能取出的认识。对的操作就如同使用这个盒子。是一种只能在一端进行插入与删除...

    ec382cf3e2e3a1d5626d49b871518678.png

    点击图片上方蓝字字体 " 算法简堂 "即可订阅 栈——顺序栈

    1 栈

    f926f43a289175a9e03bc52dcd54db4d.png

    大家都有将物品收纳进盒子里的经历,也一定有先放进去的物品需要在最后才能取出的认识。对栈的操作就如同使用这个盒子。栈是一种只能在一端进行插入与删除操作的线性表。此外,还有以下相关概念:

    ①允许进行插入、删除操作的一端称为栈顶。

    ②表的另一端称为栈底。

    ③当栈中没有数据元素时,称为空栈。

    ④栈的插入操作通常称为进栈或入栈。

    ⑤栈的删除操作通常称为退栈或出栈。

    栈的主要特点是“后进先出”,即后进栈的元素先出栈。栈也称为后进先出表。我们知道存储结构主要有顺序存储结构、链式存储结构、索引存储结构和哈希存储结构,接下来我们就详细了解一下使用顺序存储结构实现的顺序栈。

    2 顺序栈

    (1)认识顺序栈

    假设栈的的元素都具有同一数据类型ElemType,则可用下列方式来定义顺序栈类型SqStack:

    e098c62b89e1a7e973952c3afef90573.png参照顺序表,可以画出顺序栈的示意图。

    1c752ba47f953e0d29f54d755ed9db60.png

    说明:①约定top总是指向栈顶元素,初始值为-1(后边部分动画和图片为说明问题将-1画在了物理位序下,实则不属于);

    ②当top=MaxSize-1时不能再进栈,即栈满;

    ③进栈时top增1,出栈时top减1。

    如此,我们可以得出以下四方面内容:

    ①栈空条件:top=-1;

    ②e进栈操作:top++,并将e放在top处;

    ③栈满条件:top=MaxSize-1;

    ④退栈操作:从top处取出元素e,且top--。

    3b7fcc2d13afc63cfdb920c368192454.png

    栈主要有初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈顶元素等基本运算,限于篇幅,我们仅讲解初始化栈、进栈、出栈、取栈顶元素(全部详细算法关注公众号后回复004获取)。

    (2)初始化栈

    操作:建立一个新的空栈s,实际上是将栈顶指针指向-1即可。

    总结:s为栈指针,top为s所指栈的栈顶指针。

    主要代码:

    920285d497230b818d0fefba06042149.png

    (3)进栈

    操作:在栈不满的条件下,先将栈指针增1,然后在该位置上插入元素e。

    4893781312135caee49765a65d841627.gif

    主要代码:

    597846e3f6a54d5cbfe6e940c3ea8f2d.png

    (4)出栈

    操作:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈指针减1。

    e976dda568cf996fb940f2353cf824a0.gif

    主要代码:

    641c9edcf4eaa3eca4ff528384645e9d.png

    (5)取栈顶元素

    操作:在栈不为空的条件下,将栈顶元素赋给e。

    主要代码:

    d0c2324495ff361e64ccd0a58bcd91c9.png

    END

    985a0c34a8e5c0e64ac46e8a01d4103f.png长按 关注轻松学习 f3cf53461bcbd439f908c46b8c6295b0.gif 给个“赞”和“在看”,是对简堂最大的支持!
    展开全文
  • 定义 /** * className:Statck * * @author:zjl * @version:0.1 * @date:2020/7/1512:22 * @since:jdk1.8 */ public class Statck { private int maxSize;//最大容量 private int top;//栈顶指针(始终...

    定义栈

    /**
     * className:Statck
     *
     * @author:zjl
     * @version:0.1
     * @date:2020/7/1512:22
     * @since:jdk1.8
     */
    public class Statck {
    
        private int maxSize;//栈最大容量
        private  int top;//栈顶指针(始终指向栈顶的节点)
        private  Object[] stack;
    
        public Statck(int maxSize) {
            this.maxSize = maxSize;
            this.stack = new Object[maxSize];
            this.top = -1;
        }
    
        public int getMaxSize() {
            return maxSize;
        }
    
        public void setMaxSize(int maxSize) {
            this.maxSize = maxSize;
        }
    
        public int getTop() {
            return top;
        }
    
        public void setTop(int top) {
            this.top = top;
        }
    
        public Object[] getStack() {
            return stack;
        }
    
        public void setStack(Object[] stack) {
            this.stack = stack;
        }
    
    
    }
    
    

    工具类(操作栈的相关方法)

    /**
     * className:Util
     *
     * @author:zjl
     * @version:0.1
     * @date:2020/7/1512:16
     * @since:jdk1.8
     */
    public class Util {
    
        /**
         * 入栈
         * @param obj
         * @param statck
         * @return
         */
        public boolean push(Object obj,Statck statck){
            if(statck.getTop()==statck.getMaxSize()-1)//判断是否栈满
                return false;
            statck.setTop(statck.getTop()+1);
            statck.getStack()[statck.getTop()] = obj;
            return true;
        }
    
        /**
         * 出栈
         * @param statck
         * @return
         */
        public Object pop(Statck statck){
            if(statck.getTop()==-1)//判断是否栈空
                throw new RuntimeException("栈空,出栈失败!");
            Object obj = statck.getStack()[statck.getTop()];
            statck.setTop(statck.getTop()-1);
            return obj;
        }
    
        /**
         * 初始化栈
         * @param statck
         */
        public void initi(Statck statck){
            for (int i = 0; i < statck.getTop(); i++) {
                statck.getStack()[i] = null;
            }
            statck.setTop(-1);
        }
    
        /**
         * 控制台打印栈
         * @param statck
         */
        public void show(Statck statck){
            System.out.println("*************");
            System.out.print("*");
            for (int i = 0; i <=statck.getTop(); i++) {
                System.out.print(statck.getStack()[i]+" ");
            }
            System.out.print("\n*************");
    
        }
    
    }
    
    

    测试类

    /**
     * className:Test
     *
     * @author:zjl
     * @version:0.1
     * @date:2020/7/1512:58
     * @since:jdk1.8
     */
    public class Test {
    
        public static void main(String[] args) {
    
            //建立一个栈
            Statck statck = new Statck(6);
            //实例化工具类
            Util util = new Util();
            //进栈3个元素
            util.push("1",statck);
            util.push("2",statck);
            util.push("3",statck);
            //打印栈
            System.out.println("===================进栈三次后栈状态=================");
            util.show(statck);
            //出栈两个元素
            util.pop(statck);
            util.pop(statck);
            //打印栈
            System.out.println("\n===================出栈两次次后栈状态=================");
            util.show(statck);
            //再进栈5次
            util.push("4",statck);
            util.push("5",statck);
            util.push("6",statck);
            util.push("7",statck);
            util.push("8",statck);
            //打印栈
            System.out.println("\n=============再进栈五次次后栈状态(栈满)==============");
            util.show(statck);
            //尝试再进栈一个元素
            util.push("0",statck);
            //打印栈
            System.out.println("\n====尝试再进栈一次次后栈状态(进栈失败,栈状态不变)====");
            util.show(statck);
            //清空栈(初始化)
            util.initi(statck);
            //打印栈
            System.out.println("\n===================初始化栈(栈空)====================");
            util.show(statck);
    //        //尝试再出栈一次
    //        util.pop(statck);//报出异常
        }
    
    }
    
    

    测试结果(控制台显示)

    在这里插入图片描述
    栈空出栈结果
    在这里插入图片描述

    展开全文
  • 初始化、进栈出栈、清空、销毁,dos输入输出
  • C++实现代码

    2016-09-15 23:25:37
    数据结构实验基础——C++实现
  • 15-初始化

    千次阅读 2018-12-24 16:11:44
    计算机工程师们为了设计出更高效,更易于控制管理的程序,把内存分成一些不同的区域(详细见4-计算机的启动过程中的图3),其中有一块区域就是“”,本质上是一段内存空间,在计算机里领域里代表:数据临时存储...
  • 采用地址连续的存储空间(数组)依次存储中数据元素,由于入栈和出栈运算都是在栈顶进行,而底位置是固定不变的,可以将底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型...
  • c语言实现链栈ADT,初始化,销毁,清空,判空,获取栈顶元素,长度,入栈,出栈
  • 数据结构之C语言实现初始化、入栈、出栈、查看栈顶、查看大小、判空等基础操作。 #define _CRT_SECURE_NO_WARNINGS 1 #include &lt;assert.h&gt; #include &lt;stdio.h&gt; #include &...
  • 顺序的函数源码 #include <stdio.h> #include <stdbool.h> #include <stdlib.h>...功能:顺序函数的使用 ...在顺序中:我们主要讨论顺序初始化空,满,入栈,出栈,遍历
  • 一、初始化栈 链栈初始化即先构造一个空栈,将栈顶指针top所指的头结点的指针域置空。 //初始化 LinkedStack Init_LinkedStack() { LinkedStack top=(LinkedStackNode * )malloc (sizeof( LinkedStackNode)); if...
  • 实现顺序初始化、出栈、入栈,取栈顶、遍历操作 #include<iostream> #define ok 1 #define error 0 #define MAXSIZE 100 using namespace std; struct SqStack{ int *base; int *top; int stacksize...
  • // sqstack.cpp : 顺序栈初始化和输出打印 // #include "stdafx.h" #include "iostream" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char ElemType; typedef int Status; using ...
  • 文章目录的定义的存储上的基本操作初始化判空操作进栈操作出栈操作读栈顶元素遍历销毁完整代码及实例共享 的定义 (Stack)是只允许在一端进行插入或删除操作的线性表。 的示意图: 栈顶Top:...
  • 本资源为顺序代码和运行exe文件,里面包含的操作为1:初始化顺序2:销毁3:清空4:是否为空5:返回栈顶元素6:插入元素到中7:删除栈顶元素,并返回8:当前元素个数\
  • 链式栈初始化,入栈,出栈

    千次阅读 2017-09-06 09:49:49
    //链式的结构typedef struct Node //的结点结构 { int data; struct Node *next; }Node,*PNode;typedef struct LinkStack //的结构 { PNode top; //栈顶 ...//栈初始化bool InitStack(LinkStack
  • 使用c++完成数据结构顺序的基本操作,包括(初始化、入栈、出栈、取栈顶元素、遍历输出等),可直接编译运行。
  • 段是个一直困扰我的问题,主要原因就是段不同于代码段和数据段,段的扩展方式是向下扩展的(向低地址扩展),所以段的段界限是其下限,而上限是无限制的(其实是有的,就是可用的最大的内存地址)。...
  • 目录栈的一些基本操作栈的概念(新手必看)初始化栈销毁栈清空栈判空栈栈长度取栈顶元素入栈操作出栈操作输出栈进制转换 栈的概念(新手必看) 栈(stack)又名堆栈,是一种运算受限的线性表。限定仅在表尾进行插入和...
  • 下面贴关于顺序代码: #include<stdio.h> #include<stdlib.h> //存储结构定义 #define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREATEMENT 10//存储空间分配增量 #define OK 1 ...
  • 一部分伪代码 c++代码 #include using namespace std; #define stack_Size 100 /*堆是一种数据结构,用数组的形式表现出来*/ class stackClass//不需要typedef { private: int data[stack_Size]; int top; ...
  • 无头结点的链栈初始化,判断是否为空,进栈,出栈 typedef struct LNode { int data; LNode *next; }LNode; void InitStack(LNode *&lst) { lst=NULL; } int isEmpty(LNode *&lst) { if(lst==NULL) ...
  • 实现顺序初始化、入栈和出栈操作

    万次阅读 多人点赞 2018-05-04 09:49:59
    编写一个程序实现顺序初始化、入栈和出栈操作; //方案1 # include&amp;amp;lt;stdlib.h&amp;amp;gt; #include&amp;amp;lt;iostream&amp;amp;gt; using namespace std; # define ...
  • 随手练习一下,详细代码解释都在代码片里请仔细看看 如果有什么不对的地方,请在下方留言 先建立头文件: #define _CRT_SECURE_NO_WARNINGS 1 #ifndef _TEST_H #define _TEST_H //的链式存储结构; typedef struct...
  • 具体内容包括网络总体架构分析、网络协议头文件分析、BSD socket 层实现分析、INET socket 层实现分析、网络层实现分析、链路层实现分析、网络设备驱动程序分析、系统网络栈初始化等内容。 本书适合 Linux 网络...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 将顺序的结构定义为: #define M 100 //的空间 ...试写出SqStack的初始化函数、入栈函数和出栈函数 。并在main()函数中测试上述函数。 #include #include #define M 100 #define OK 1 #defi
  • 试编写双栈初始化,判断空、满、进栈和出栈等算法的函数。 #include<iostream> using namespace std; typedef struct { int top[2], bot[2]; int *V; int m; }DblStack; void ShowM
  • 文章目录一,的定义二,顺序 一,的定义 是限定仅在表尾进行插入和删除操作的线性表 允许插入和删除的一端称为栈顶,另一端称为底。不含任何数据元素的称为空栈。又称为后进先出的线性表,简称...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 351,564
精华内容 140,625
关键字:

初始化栈的代码

友情链接: doc0842.zip