數據結構C語言實現----入棧操作


 

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;
}

  

 

 

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM