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和指针》

  • 相关阅读:
    pip install
    自动更新高清电影文件中文名
    csv、excel导入oracle
    02_Jenkins配置任务
    01_Jenkins windows安装
    run_jmeter.py
    02_禅道的基本使用
    01_禅道搭建手册
    01_charles 下载安装(破解版)
    06_Linux常见的命令
  • 原文地址:https://www.cnblogs.com/maluning/p/8196388.html
Copyright © 2011-2022 走看看