链栈的基本操作 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("\n");
}
int main() {
    LinkStack s;
    ElementType c;
    ElementType* y;
    y = &c; 
    InitLinkStack(&s);
    printf("入栈元素为:\n");
    scanf("%c", &c);
    while (c != '\n') {
        PushStack(&s, c);
        scanf("%c", &c);
    }
    PrintNode(s);
    PopStack(&s, y);
    printf("出栈元素为:%c\n", *y);
    printf("栈中剩余元素为:\n");
    PrintNode(s);
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM