设计栈还是失败:提示溢出找不出错误。。。。。学了这么久感觉没学,语法学的垃圾

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define CAPACITY 20
#define OK 1
#define ERROR -1
#define STACKINCERMENT 10
//栈的结点的结构设计
typedef struct stack
{
    int *base; //指针设计了 但是实际存储数据的变量在哪里 可以是指针也可以是 一个数组 
    int *top;
    int stackszie;
} Sqstack;
//struct Sqstack stack;
extern int initSatck(Sqstack S);
extern int getTop(Sqstack s, int *p);
extern int pop(Sqstack s, int *p);
extern int push(Sqstack s, int p);
void main()
{
    Sqstack s;
    int i = initSatck(s);
    int j = push(s, 10);
    //     j = push(s, 2);
    //     int *p;
    //     getTop(s, p);
    //     printf("%d", *p);
}
int initSatck(Sqstack S)
{
    //不能依葫芦画瓢 必须理解了才能写出来 看书加百度 不要取花太多时间取找视频
    //数组分配空间?
    S.base = (int *)malloc(CAPACITY * sizeof(int));
    printf("初始化栈");
    if (!S.base)
    {
        printf("分配内存失败");
        exit(-1);
    }
    //top指针指向数组的第一个第一个储存单元
    S.top = S.base;
    S.stackszie = CAPACITY;
    printf("测试");
    return OK;
}

//GetTop
int getTop(Sqstack s, int *p)
{
    //栈不为空 则使用e返回S的栈顶元素,并返回OK否则返回ERROR
    if (s.top == s.base)
        return ERROR;
    p = s.top - 1;
    return OK;
}

//push
int push(Sqstack s, int p)
{
    //插入元素之前需要判断栈是否是已经满了
    if ((s.top - s.base) >= s.stackszie)
    {
        printf("空间不足");
        //给数组从新分配存储空间
        // s.base = (int *)realloc(s.base, (s.stackszie + STACKINCERMENT) * sizeof(int));

        // if (!s.base)
        //     exit(-1);
        // s.top = s.base + s.stackszie;
        // s.stackszie += STACKINCERMENT;
    }
    printf("入栈");
    *s.top++ = p;
    return OK;
}

//Pop  *p是一个数 p是一个指针
int pop(Sqstack s, int *p)
{
    //需要判断是不是为空
    if (s.top == s.base)
    {
        return ERROR;
    }
    p = --s.top;
    return OK;
}

发布了212 篇原创文章 · 获赞 32 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_42664961/article/details/104093322