#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;
}
设计栈还是失败:提示溢出找不出错误。。。。。学了这么久感觉没学,语法学的垃圾
猜你喜欢
转载自blog.csdn.net/qq_42664961/article/details/104093322
今日推荐
周排行