1.3 链栈

1.3 链栈_哔哩哔哩_bilibili

 

//链栈的实现(带头结点) C++编译
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

typedef struct LiNode{
    int data;
    struct LiNode *next;
}LiNode,*LiStack;

//初始化栈
void InitStack(LiStack &L){
    L=(LiNode*)malloc(sizeof(LiNode));
    L->next=NULL;
}

//判断栈是否为空
bool StackEmpty(LiStack L){
    return L->next==NULL;
}

//入栈
void Push(LiStack &L,int e){
    LiNode *s=(LiNode*)malloc(sizeof(LiNode));
    s->data=e;
    s->next=L->next;
    L->next=s;
}

//出栈
void Pop(LiStack &L, int &e){
    if(StackEmpty(L)) return;
    LiNode *s=L->next;
    e=s->data;
    L->next=s->next;
    free(s);
}

//读栈顶
int GetTop(LiStack L){
    if(!StackEmpty(L))
        return L->next->data;
}
int main(){
    LiStack L; //声明链栈
    InitStack(L); //初始化
    int n=3; int a[]={0,2,5};
    for(int i=0;i<n;i++){
        Push(L,a[i]);
    }
    for(int i=0,e;i<n;i++){
        Pop(L,e);
        printf("%d ",e);
    }
    return 0;
}

 

//链栈的实现(不带头结点) C++编译
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

typedef struct LiNode{
    int data;
    struct LiNode *next;
}LiNode,*LiStack;

//初始化栈
void InitStack(LiStack &L){
    L=NULL;
}

//判断栈是否为空
bool StackEmpty(LiStack L){
    return L==NULL;
}

//入栈
void Push(LiStack &L, int e){
    LiNode *s=(LiNode*)malloc(sizeof(LiNode));
    s->data=e;
    s->next=L;
    L=s;
}

//出栈
void Pop(LiStack &L, int &e){
    if(StackEmpty(L)) return;
    LiNode *s=L;
    e=s->data;
    L=s->next;
    free(s);
}

//读栈顶
int GetTop(LiStack L){
    if(!StackEmpty(L))
        return L->data;
}
int main(){
    LiStack L; //声明链栈
    InitStack(L); //初始化
    int n=3; int a[]={0,2,5};
    for(int i=0;i<n;i++){
        Push(L,a[i]);
    }
    for(int i=0,e;i<n;i++){
        Pop(L,e);
        printf("%d ",e);
    }
    return 0;
}

 

 

.

posted @ 2026-09-10 07:06  董晓  阅读(17)  评论(0)    收藏  举报