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

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/maluning/p/8196388.html
Copyright © 2011-2022 走看看