zoukankan      html  css  js  c++  java
  • 【算法和数据结构】_3_线性结构_栈

      程序代码可以编译通过,未用数据进行测试。 

    /*
        本程序测试线性数据结构:栈
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    struct StackNode
    {
        int* stack;
        int  Top;  //从1开始计数
        int  Size;
    };
    
    typedef struct StackNode STACK;
    typedef enum {FALSE,TRUE} BOOL;
    
    void CreateStack(STACK* stack,int size);
    void InitStack(STACK* stack);
    BOOL IsStackEmpty(STACK* stack);
    BOOL IsStackFull(STACK* stack);
    BOOL GetTop(STACK* stack,int* element);
    BOOL Push(STACK* stack,int element);
    BOOL Pop(STACK* stack);
    
    
    int main(int argc,char* argv[])
    {
        STACK stack;
        int size;
    
        stack.stack =NULL;
        puts("Enter the length of stack to create:");
        scanf("%d",&size);
        putchar('\n');
        CreateStack(&stack,size);
    
        getchar();
        getchar();
        return 0;
    }
    
    
    /*
    函数功能:
        创建空栈
    函数原型:
        void CreateStack(STACK* stack)
    函数参数:
        STACK* stack: 指向栈的指针
        int size:要创建的栈的大小
    返回值:
        无
    异常:
        传递空指针
    */
    void CreateStack(STACK* stack,int size)
    {
        if(stack==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
    
        if(stack->stack=(int *)malloc(sizeof(int)*size))
        {
            stack->Size=size;
            stack->Top=0;
        }
        else
        {
            puts("Error.\n");
            exit(0);
        }
    }
    
    /*
    函数功能:
        初始化栈空间,将所有的栈元素初始化为零
    函数原型:
        void InitStack(STACK* stack)
    函数参数:
        STACK* stack:栈指针
    返回值:
        无
    异常:
        传递空指针
    */
    void InitStack(STACK* stack)
    {
        int i;
    
        //检测空指针
        if( NULL == stack || NULL == stack->stack)
        {
            puts("Error.\n");
            exit(0);
        }
        else
        {
            i=0;
            while(i < stack->Size)
            {
                stack->stack[i]=0;
                i++;
            }
        }
    }
    
    /*
    函数功能:
        判断栈是否为空
    函数原型:
        BOOL IsStackEmpty(STACK* stack)
    函数参数:
        STACK* stack:栈指针
    返回值:
        如果为空,则返回TRUE,否则返回FALSE
    异常:
        传递空指针
    */
    BOOL IsStackEmpty(STACK* stack)
    {
        if(NULL==stack || stack->stack ==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
        
        if(0==stack->Top)
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    
    /*
    函数功能:
        判断是否栈满
    函数原型:
        BOOL IsStackFull(STACK* stack)
    函数参数:
        STACK* stack:栈指针
    返回值:
        如果栈满,返回TRUE,否则返回FALSE
    异常:
        传递空指针
    */
    BOOL IsStackFull(STACK* stack)
    {
        if(NULL==stack || stack->stack ==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
    
        if(stack->Top==stack->Size)
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    
    }
    
    /*
    函数功能:
        获取栈顶元素的值
    函数原型:
        BOOL GetTop(STACK* stack,int* element)
    函数参数:
        STACK* stack:栈指针
    返回值:
        如果可取值,返回TRUE,并设置*element=栈顶值
        否则返回FALSE,并设置*element=0;
    异常:
        传递空指针
    */
    BOOL GetTop(STACK* stack,int* element)
    {
        if(NULL==stack || stack->stack ==NULL||element==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
    
        if(IsStackEmpty(stack))
        {
            *element=0;
            return FALSE;
        }
        else
        {
            *element=stack->stack[stack->Top-1];
            return TRUE;
        }
    }
    
    /*
    函数功能:
        压栈
    函数原型:
        BOOL Push(STACK* stack,int element)
    函数参数:
        STACK* stack:栈指针
        int element:入栈元素
    返回值:
        如果压栈成功,返回TRUE,否则返回FALSE;
    异常:
        传递空指针
    */
    BOOL Push(STACK* stack,int element)
    {
        if(NULL==stack || stack->stack ==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
    
        if(IsStackFull(stack))
        {    
            //栈满,无法压栈
            return FALSE;
        }
        else
        {
            stack->stack[stack->Top]=element;
            stack->Top++;
            return TRUE;
        }
    
    }
    
    /*
    函数功能:
        出栈
    函数原型:
        BOOL Pop(STACK* stack)
    函数参数:
        STACK* stack:栈指针
    返回值:
        如果出栈成功,则返回TRUE,否则返回FALSE
    异常:
        传递空指针
    */
    BOOL Pop(STACK* stack)
    {
        if(NULL==stack || stack->stack ==NULL)
        {
            puts("Error.\n");
            exit(0);
        }
    
        if(IsStackEmpty(stack))
        {
            return FALSE;
        }
        else
        {
            stack->Top--;
            return TRUE;
        }
    }
     
  • 相关阅读:
    宽屏手机显示9.png的图片拉伸不均衡
    android中 System.exit(0)的理解
    android 由于界面控件过多耗时处理办法
    iOS开发笔记--sqlite3 语句总结
    iOS开发笔记--iOS应用架构谈
    iOS开发笔记--iOS 学习资料整理
    iOS开发笔记--iOS、mac开源项目及库汇总
    iOS开发笔记--iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognize
    iOS开发笔记--Masonry介绍与使用实践:快速上手Autolayout
    iOS开发笔记--使用CocoaPods来管理iOS项目的依赖库
  • 原文地址:https://www.cnblogs.com/volcanol/p/3032890.html
Copyright © 2011-2022 走看看