zoukankan      html  css  js  c++  java
  • C语言描述栈的实现及操作(数组实现)

    一.静态数组实现

    1.堆栈接口

    //    一个堆栈模块接口
    //    命名为stack.h
    
    #define        STACK_YTPE        int        //    堆栈所存储值的类型
    
    //    push函数
    //    把一个新值压入栈中
    void push(STACK_YTPE value);
    
    //    pop函数
    //    从堆栈中弹出一个值
    STACK_YTPE pop(void);    
    
    //    top函数
    //    返回堆栈顶部元素的值
    STACK_YTPE top(void);
    
    //    is_empty函数
    //    如果堆栈为空,返回TRUE,否则返回FALSE
    bool    is_empty(void);
    
    //    is_full函数
    //    如果堆栈已满,返回TRUE,否则返回FALSE
    bool is_full(void);

    2.静态数组堆栈

    #include<stdio.h>
    #include<assert.h>
    #include"stack.h"
    
    #define STACK_SIZE    100        //    堆栈中值数量的最大限制
    
    static    STACK_TYPE    stack[STACK_SIZE];    //    存储堆栈中值得数组
    static    int    top_element = -1;    //    指向顶部元素的指针
    
    void push(STACK_TYPE value){
        assert(!is_full());
        top_element += 1;
        stack[top_element] = value;
    }
    
    STACK_TYPE pop(void){
        assert(!is_empty());
        return    stack[top_element--];
    }
    
    STACK_TYPE    top(void){
        assert(!is_empty());
        return stack[top_element];
    }
    
    bool    is_empty(void){
        return    top_element == -1;
    }
    
    bool is_full(void){
        return top_element == STACK_SIZE-1;
    }

      

    二.动态数组实现

    1.堆栈接口

      只需要最原来的stack.h接口基础上加上添加以下两个定义即可。

    //    creat_stack函数
    //    创建堆栈。参数指定可以保存多少元素
    void    creat_stack(size_t size);
    
    //    destroy_stack函数
    //    销毁堆栈。释放堆栈所使用的内存
    void destroy_stack(void);

    2.动态数组堆栈

    //    一个动态分配数组实现的堆栈
    
    #include<stdio.h>
    #include<assert.h>
    #include<stdlib.h>
    #include<malloc.h>
    #include"stack.h"
    
    //    用于存储堆栈元素的数组和指向堆栈顶部元素的指针
    static  STACK_TYPE    *stack;
    static    size_t    stack_size;
    static    int     top_element = -1;
    
    //creat_stack
    void  creat_stack(size_t size){
        assert(stack_size == 0);
        stack_size = size;
        stack = malloc(stack_size*sizeof(STACK_TYPE));
        assert(stack != NULL);
    }
    
    //destroy_stack
    void  destroy_stack(void){
        assert(stack_size>0);
        stack_size = 0;
        free(stack);
        stack = NULL;
    }
    
    void push(STACK_TYPE value){
        assert(!is_full());
        top_element += 1;
        stack[top_element] = value;
    }
    
    STACK_TYPE pop(void){
        assert(!is_empty());
        return    stack[top_element--];
    }
    
    STACK_TYPE    top(void){
        assert(!is_empty());
        return stack[top_element];
    }
    
    bool    is_empty(void){
        return    top_element == -1;
    }
    
    bool is_full(void){
        return top_element == stack_size-1;
    }

    参考文献

    《C和指针》

  • 相关阅读:
    tomcat报错:java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
    mysql 的 case when 用法
    分享几个能用的 editplus 注册码
    windows 时间同步至最新时间方法 | windows 时间同步服务器
    tomcat 如何登录 Server Status、Manager App、Host Manager
    Eclipse将java项目导出可执行的jar文件
    Java 中将字符串与 unicode 相互转换的工具类
    解决Lost connection to MySQL server during query错误方法
    gt,gte,lt,lte缩写的含义
    python 打印调用栈
  • 原文地址:https://www.cnblogs.com/maluning/p/8196388.html
Copyright © 2011-2022 走看看