【程序设计与数据结构】第2章:程序设计技术之堆栈


    #include <stdbool.h> 
    #include <stddef.h> 
    #include <malloc.h>

    #define MAXSIZE 100 

    struct stackCDT{ 
        int *data; 
        size_t top; 
        size_t numData; 
    };

    typedef int stackElementT; 
    typedef struct stackCDT *stackADT; 

    stackADT newStack(); 
    void freeStack(stackADT stack); 
    bool push(stackADT stack, stackElementT value); 
    bool pop(stackADT stack, stackElementT *pValue); 
    bool stackIsEmpty(stackADT stack); 
    bool stackIsFull(stackADT stack); 
    size_t getStackDepth(stackADT stack); 
    bool getStackElement(stackADT stack, size_t index, stackElementT *pValue); 


    stackADT newStack() 
    { 
        stackADT stack; 
        stack = (stackADT)malloc(sizeof(struct stackCDT)); 
        stack -> data = (int*)malloc(MAXSIZE*sizeof(int)); 
        stack -> top = 0; 
        stack -> numData = MAXSIZE; 
        return stack; 
    }

    void freeStack(stackADT stack) 
    { 
        free(stack -> data); 
        free(stack); 
    } 
        
    bool push(stackADT stack, stackElementT value) 
    { 
        if(stackIsFull(stack)) return false; 
        stack -> data[stack -> top ++] = value; 
        return true; 
    } 
        
    bool pop(stackADT stack, stackElementT *pValue) 
    { 
        if (stackIsEmpty(stack)) return false; 
        *pValue = stack -> data[-- stack -> top]; 
        return true; 
    }

    bool stackIsEmpty(stackADT stack) 
    { 
        return (stack -> top == 0); 
    } 
    
    bool stackIsFull(stackADT stack) 
    { 
        return (stack -> top == stack -> numData); 
    } 
    
    size_t getStackDepth(stackADT stack) 
    { 
        return (stack -> top); 
    } 
    
    int main(int argc, int *argv[]) 
    {
        stackADT stack; 
        int temp; 

        stack = newStack(); 
        for(int i = 0; i < 16; i++) push(stack, i); 
        printf("%d\n", getStackDepth(stack)); 
        printf("%d\n", temp); 
        while (!stackIsEmpty(stack)) { 
            pop(stack, &temp); 
            printf("%d ", temp); 
        } 
        printf("\n"); 
        freeStack(stack); 
        return 0; 
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值