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; }
運行結果: