zoukankan      html  css  js  c++  java
  • c语言实现基本的数据结构(三) 栈

    #include <stdio.h>
    #include <tchar.h>
    #include <stdlib.h>
    
    
    #define StackSize 5
    #define IncrementSize 5
    // TODO:  在此处引用程序需要的其他头文件
    struct Stack
    {
        int *base;
        int *top;
        int stacksize;
    };
    //初始化栈
    bool Init_Stack(Stack* s){
        s->base = (int*)malloc(StackSize*sizeof(int));
        if (s->base == NULL) return false;
        s->top = s->base;
        s->stacksize = StackSize;
        return true;
    }
    //销毁栈
    bool Destroy_Stack(Stack* s){
        free(s->base);
        s->base = NULL;
        s->top = NULL;
        s->stacksize = 0;
        return true;
    }
    //清空栈
    bool Clear_Stack(Stack* s){
        s->top = s->base;
        return true;
    }
    //插入元素
    bool Push(Stack* s, int value){
        if (s->top - s->base >= s->stacksize){
            s->base = (int*)realloc(s->base, (StackSize + IncrementSize)*sizeof(int));
            s->top = s->base + s->stacksize;//重置一下栈顶,感觉也没多大必要呀
            s->stacksize += IncrementSize;
        }
        *++s->top = value;//栈顶指向栈顶元素
        s->stacksize++;
        return true;
    }
    //弹出元素
    int Pop(Stack* s){
        if (s->top == s->base) return false;
        int p = *s->top--;
        s->stacksize--;
        return p;
    }
    //逆序打印
    void Print_Stack(Stack s){
        if (s.top == s.base) printf("此栈为空
    ");
        while (s.top!=s.base){
            printf("%d->", Pop(&s));
        }
        printf("
    ");
    }
    //正序打印
    void Stack_Traverse(Stack s){
        if (s.top == s.base) printf("此栈为空
    ");
        while (s.top != s.base){
            printf("%d->", *++s.base);
        }
        printf("
    ");
    }
  • 相关阅读:
    扑克牌顺子
    数组转 二叉树 ,并且输出二叉树的右视图
    数组中逆序对(归并排序思想)
    链表数字加和
    回文数字
    数组中 只出现一次的数
    判断是否有从根节点到叶子节点的节点值之和等于 sum
    双指针求 3个数和 为0的 数
    vue项目将css,js全部打包到html文件配置
    webpack4配置优化
  • 原文地址:https://www.cnblogs.com/xin1998/p/7745043.html
Copyright © 2011-2022 走看看