1.栈顶是没有元素的,栈顶是一个空值
2.把一个元素压进栈时,不要给栈顶的地址赋值,而是赋值给指针
例如:你在结构体中定义了 char *top;
那么你要把元素date赋值给*top,而不是top
赋值完成后,top++,因为栈顶没有值
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char *base;
char *top;
int stacksize;
} sqStack;
//////////////////////////////
//创建一个栈
#define SATCK_INIT_SIZE 100
void initstack(sqStack *stack)
{
stack->base = (char*)malloc( SATCK_INIT_SIZE * sizeof(char));
if (!stack->base)
{
exit(0);
}
stack->top = stack->base;
stack->stacksize = SATCK_INIT_SIZE;
}
/////////////////////////////
//入栈操作
#define STACK 10
void Push(sqStack *stack , char c)
{
if (stack->top - stack->base > stack->stacksize)
{//空间不足,追加空间
stack->base = (char*)realloc(stack->base , (STACK + stack->stacksize) * sizeof(char));//用realloc函数在原内容不变的基础上追加空间
if (!stack->base)
{
exit(0);
}
stack->top = stack->base + stack->stacksize;
stack->stacksize = stack->stacksize + STACK;
}
*(stack->top) = c;//stack->top是一个地址,而*(stack->top)是一个char类型的变量
stack->top++;//地址加一
}
int main()
{
sqStack stack;
initstack(&stack);//创建一个栈
printf("请输入要压入栈的字符:");
char c;
scanf("%c",&c);
Push(&stack,c);
printf("打印栈中元素:%c" , *--(stack.top));
return 0;
}
运行结果:
