zoukankan      html  css  js  c++  java
  • /*
        栈:
        1、什么叫栈:栈就是一个存储结构,简单的说就是一种存储的方式
        2、栈是怎么存储的:栈是先进后出的一种存储结构,类似于箱子
        3、栈的分类:静态栈、动态栈。
        4、什么叫静态栈:类似于数组往箱子里放
        5、什么叫动态栈:类似于链表往箱子里放
        6、栈的应用有哪些:迷宫,表达式的计算,函数的调用,中断等,应用相当的广泛
        7、栈的操作步骤:初始化,压栈,出栈
        注:栈是静态内存存储,比如说,定义的变量,这是系统自动分配的。堆是动态存储结构,是程序员分配的
            比如说malloc(sizeof(4))
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    
    typedef struct node
    {
        int data;
        struct node * pNext;
    }Node,*pNode;
    
    typedef struct stack
    {
        pNode pTop;
        pNode pBottom;
    }Stack,* pStack;
    
    typedef int bool;
    #define true 0
    #define false 1
    
    void init_stack(pStack);
    bool is_empty(pStack);
    bool push_stack(pStack, int);
    bool pop_stack(pStack, int *);
    bool clear_stack(pStack);
    int main(void)
    {
        Stack S;
        int val;
        init_stack(&S);
        puts("------------------------------初始化栈是否为空-------------------------------");
        if( is_empty(&S) )
            printf("栈不为空!
    ");
        else
            printf("栈为空!
    ");
        push_stack(&S, 23);
        push_stack(&S, 45);
        push_stack(&S, 19);
        puts("-------------------------------压栈之后是否为空------------------------------");
        if( is_empty(&S) )
            printf("栈不为空!
    ");
        else
            printf("栈为空!
    ");
        puts("-------------------------------压栈是否成功----------------------------------");
        if( push_stack(&S, 55) )
            printf("压栈失败!
    ");
        else
            printf("压栈成功!
    ");
        if( !pop_stack(&S, &val) )
            printf("出栈成功:");
        pop_stack(&S,&val);
        puts("---------------------------------把栈清空-----------------------------------");
        if( !clear_stack(&S) )
            puts("清栈成功!");
        pop_stack(&S,&val);
        return 0;
    }
    void init_stack(pStack pS)
    {
        pNode pNew=(pNode)malloc(sizeof(Node));
        if(pNew==NULL)
        {
            printf("动态内存分配失败!");
            exit(-1);
        }
        pS->pTop=pNew;
        pS->pBottom=pS->pTop;
        pS->pBottom->pNext=NULL;    //等价于 pNew->pNext=NULL
        return;
    }
    bool is_empty(pStack pS)
    {
        if(pS->pTop==pS->pBottom)
            return true;
        else
            return false;
    }
    bool push_stack(pStack pS, int val)
    {
        pNode pNew=(pNode)malloc(sizeof(Node));
        if(pNew==NULL)
        {
            printf("动态内存分配失败!");
            exit(-1);
        }
        pNew->data=val;
        pNew->pNext=pS->pTop;
        pS->pTop=pNew;
        if(pS->pTop==pS->pBottom)
            return false;
        else
            return true;
    }
    bool pop_stack(pStack pS, int * pVal)
    {
        pNode p=NULL;
            while( is_empty(pS) )
            {
                p=pS->pTop;
                *pVal=p->data;
                printf("%d	",*pVal);
                pS->pTop=p->pNext;
                free(p);
            }
            putchar('
    ');
            if( is_empty(pS) )
                return false;
            else
                return true;
    }
    bool clear_stack(pStack pS)
    {
        while( pS->pTop != pS->pBottom )
        {
            pNode p=pS->pTop;
            pNode q=p->pNext;
            free(p);
            pS->pTop=q;
        }
        if(pS->pTop==pS->pBottom)
            return true;
        else
            return false;
    }
  • 相关阅读:
    Excel 如何在程序运行期间提示信息“正在运行中。。。请稍候 38云淡淡
    EXT学习笔记第一课
    java学习日志1
    C语言基础知识
    js所学知识点
    javascript 取最大值和最小值!
    html常用标签
    javascript4位随机数(字体都有颜色)
    marginpadding区别及bug
    数独的优化回朔算法(四)
  • 原文地址:https://www.cnblogs.com/fengkui/p/6117956.html
Copyright © 2011-2022 走看看