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; }
运行结果:
原文:https://www.cnblogs.com/jerryleesir/p/13323418.html