链栈操作

Posted timesi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链栈操作相关的知识,希望对你有一定的参考价值。

//链栈操作(带头节点)
#include <stdio.h>
#include <malloc.h>

typedef struct LinkStack{
    int data;
    struct LinkStack* next;
}Stack,*LStack;

Stack * InitStack(LStack *);    //初始化
void Push(LStack , int);    //入栈 
void Pop(LStack);       //出栈 
void output(LStack);    //遍历 

int main(void){
    LStack S;
    InitStack(&S);
    if(S->next == NULL){
        printf("初始化成功!
");
    }else{
        printf("初始化失败!
");
    }
    Push(S,1);
    Push(S,2);
    Push(S,3);
    Push(S,4);
    Push(S,5);
    
    printf("当前链栈中的数据是:");
    output(S);
    printf("
"); 
    
    Pop(S);
    Pop(S);
    Pop(S);
    printf("当前链栈中的数据是:");
    output(S);
    
    return 0;
} 

//初始化 
Stack * InitStack(LStack *S){
    (*S) = (Stack *)malloc(sizeof(Stack));
    (*S)->next = NULL;
    return (*S);
}

//入栈
void Push(LStack S , int e){
    Stack *p = (Stack *)malloc(sizeof(Stack));
    p->data = e;
    p->next = S->next;
    S->next = p;
} 

//出栈 
void Pop(LStack S){
    Stack *p = S->next;
    int e;
    if(S->next != NULL){
        e = p->data;
        printf("当前弹出数据是:%d
",e);
        S->next = p->next;
        printf("当前栈顶数据是:%d
",S->next->data); 
        free(p);
    }else{
        printf("栈为空!
");
    }
}

//遍历 
void output(LStack S){
    Stack *p = S->next;
    if(p == NULL){
        printf("栈为空!"); 
    }else{
        while(p != NULL){
            printf("%d ",p->data);
            p = p->next;
        }
    }
}

以上是关于链栈操作的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记——链式存储结构实现栈

链栈存储结构和基本运算

链栈的基本操作

链栈算法

链栈操作

数据结构——链栈及其操作