链栈的基本操作 C语言

#include<stdio.h>
#include<stdlib.h>
typedef char ElementType;
typedef struct node* LinkStack;
struct node {
    ElementType data;
    LinkStack next;
};
//初始化
void InitLinkStack(LinkStack *L) {
    (*L) = NULL;
}
//入栈
void PushStack(LinkStack *L, ElementType x) {
    LinkStack s;
    s = (LinkStack)malloc(sizeof(struct node));
    s->data = x;
    s->next = (*L); //L是栈顶元素
    (*L) = s;  //s成为新的栈顶元素
}
//出栈
void PopStack(LinkStack *L, ElementType *x) {
    if ((*L)->next == NULL) {
        printf("空栈");
    }
    else {
        LinkStack p;
        *x = (*L)->data;
        p = (*L);  //标记栈顶
        (*L) = (*L)->next;
        free(p); //出栈
    }
}
void PrintNode(LinkStack L) {
    while (L != NULL) {
        printf("%c", L->data);
        L = L->next;
    }
    printf("
");
}
int main() {
    LinkStack s;
    ElementType c;
    ElementType* y;
    y = &c; 
    InitLinkStack(&s);
    printf("入栈元素为:
");
    scanf("%c", &c);
    while (c != '
') {
        PushStack(&s, c);
        scanf("%c", &c);
    }
    PrintNode(s);
    PopStack(&s, y);
    printf("出栈元素为:%c
", *y);
    printf("栈中剩余元素为:
");
    PrintNode(s);
}
原文地址:https://www.cnblogs.com/yudongxuan/p/7728195.html