数据结构学习【栈 链式结构 C++】链栈实现

数据结构学习【栈 链式结构 C++】


本次实现的是栈的链式存储结构——链栈。
默认采用头结点。

#include <iostream>
using namespace std;
// ADT
// InitStack(&S) //初始化栈
// DestroyStack(&S) //销毁栈

// Push(&S,x) //进栈
// Pop(&S,&x) //出栈 弹出栈顶元素
// GetTop(S,&x) //读栈顶元素 不改变栈

// IsEmpty(S);//判断栈是否为空
// PrintStack(S);//顺序输出栈
typedef struct LinkNode{
    int data;
    struct LinkNode *next;   
}LinkNode,*LinkStack;

// Code
//初始化栈
bool InitStack(LinkStack &S){
    S=(LinkNode*)malloc(sizeof(LinkNode));
    if(S==nullptr)//假设内存不足,返回false
        return false;
    S->next=nullptr;
    return true;
}
//销毁栈
void DestroyStack(LinkStack &S){
    LinkNode* p;
    while(S){
        p=S;
        S=S->next;
        free(p);
    }
}

//进栈  链栈一般不存在栈满情况
bool Push(LinkStack &S,int x){
    LinkNode* p=(LinkNode*)malloc(sizeof(LinkNode));
    p->data=x;
    p->next=S->next;
    S->next=p;
    return true;
    
} 
//出栈 弹出栈顶元素
bool Pop(LinkStack &S,int &x){
    if(S->next==nullptr)//判断是否栈空
        return false;
    LinkNode* p=S->next;//获得栈顶元素指针
    x=p->data;
    S->next=p->next;
    free(p);
    return true;
} 
//读栈顶元素 不改变栈
bool GetTop(LinkStack S,int &x){
    if(S->next==nullptr)//判断是否栈空
        return false;
    x=S->next->data;
    return true;
} 
//判断栈是否为空
bool IsEmpty(LinkStack S){
    if(S->next==nullptr)//判断是否栈空
        return false;
    else
        return false;
}
//顺序输出栈
void PrintStack(LinkStack S){
    printf("栈内元素(从栈顶开始):");
    LinkStack p=S->next;
    while(p!=nullptr){
        printf("%2d,",p->data);
        p=p->next;
    }
    printf("\n");
}
int main(){
    LinkStack S;
    //创建栈并push元素
    InitStack(S);
    Push(S,1);
    Push(S,2);
    Push(S,3);
    Push(S,4);
    Push(S,5);
    PrintStack(S);
    //pop一个元素
    int x=-1;
    Pop(S,x);
    printf("弹出栈顶元素:%d\n",x);
    PrintStack(S);
    //获得栈顶元素
    GetTop(S,x);
    printf("栈顶元素为:%d\n",x);
    PrintStack(S);
    system("pause");
}

结果如图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值