棧的鏈式存儲結構

//鏈表
typedef struct NODE
{
    int data;//數據域
    struct NODE * next;//指針域
}* Node;
//棧
typedef struct STACK
{
    Node top;//棧頂
    Node bottom;//棧底
    
} * Stack;
//初始化
Stack init_stack();
//入棧
void push_stack(Stack stack,int data);
//出棧
void pop_stack(Stack stack,int * pData);
//遍歷
void traverse_stack(Stack stack);
//清空
void clear_stack(Stack stack);

int main(int argc, const char * argv[]) {
    
    Stack stack = init_stack();
    
    push_stack(stack, 1);
    push_stack(stack, 2);
    push_stack(stack, 3);
    push_stack(stack, 4);
    
//    traverse_stack(stack);
//    pop_stack(stack, NULL);
//    traverse_stack(stack);
    
    clear_stack(stack);
    
    return 0;
}

//初始化
Stack init_stack()
{
    Stack stack = (Stack)malloc(sizeof(Stack));
    stack->top = (Node)malloc(sizeof(Node));
    if (stack->top == NULL) {
        printf("分配內存失敗");
        exit(-1);
    }else
    {
        stack->bottom = stack->top;
        stack->top->next = NULL;
    }
    
    return  stack;
}
//入棧
void push_stack(Stack stack,int data)
{
    Node new = (Node)malloc(sizeof(Node));
    new->data = data;
    //每次新建節點指向棧頂
    new->next = stack->top;
    //棧頂指向新節點
    stack->top = new;
}
//出棧
void pop_stack(Stack stack,int * pData)
{
    if (stack->top == stack->bottom) {
        printf("已經是空棧,不能出棧");
        exit(-1);
    }
    pData = &stack->top->data;
    Node p = stack->top;
    stack->top = p->next;
    free(p);
    p = NULL;
}
//遍歷
void traverse_stack(Stack stack)
{
    Node p = stack->top;
    
    while (p != stack->bottom) {
        printf("%d   ",p->data);
        p = p->next;
    }
    printf("\n");
}
//清空
void clear_stack(Stack stack)
{
    if (stack->top == stack->bottom) {
        return;
    }else
    {
        Node p = stack->top;
        Node q;
        
        while (p != stack->bottom) {
            q = p->next;
            free(p);
            p = q;
        }
        stack->top = stack->bottom;
    }
}

demo地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容