栈——链栈

链栈只是单链表的一个简单应用,只要理解单链表的头插法,链栈的出栈入栈很好理解。

linkstack.h如下:

#include <stdio.h>
#include <malloc.h>
#include <stddef.h>

typedef int ElemType;
typedef struct Node{
    ElemType data;
    struct Node * next;
}LinkStack;

LinkStack.cpp如下:

#include "linkstack.h"
void initLinkStack(LinkStack *&ls);
bool push(LinkStack *&ls, ElemType e);
bool pop(LinkStack *&ls, ElemType &e);
bool peek(LinkStack *ls, ElemType &e);
void printStack(LinkStack *ls);

int main() {
    LinkStack * ls;
    initLinkStack(ls);

    push(ls,10);
    push(ls,20);
    push(ls,30);
    printStack(ls);

    ElemType e;
    pop(ls,e);
    printStack(ls);
    return 0;
}
void initLinkStack(LinkStack *&ls){
    ls = (LinkStack *) malloc(sizeof(LinkStack));
    ls->next = NULL;
}

void destroy(LinkStack *&ls){
    LinkStack *p = ls, *q;
    q = p->next;
    while(q != NULL){
        free(p);
        p = q;
        q = q->next;
    }
    free(p);
}

//入栈,就是一个头插法,很简单
bool push(LinkStack *&ls, ElemType e){
    LinkStack* node = (LinkStack*) malloc(sizeof(LinkStack));
    node->next = ls->next;
    node->data = e;
    ls->next = node;
    return true;
}

//出栈
bool pop(LinkStack *&ls, ElemType &e){
    if(ls->next == NULL){
        printf("栈空,无法出栈");
        return false;
    }
    LinkStack *p = ls->next;
    e = p->data;
    ls->next = p->next;
    free(p);
    return true;
}

//取栈顶
bool peek(LinkStack *ls, ElemType &e){
    if(ls->next == NULL){
        printf("栈空,无栈顶元素");
        return false;
    }
    e = ls->next->data;
    return true;
}

void printStack(LinkStack *ls){
    LinkStack *q = ls->next;
    while(q!=NULL){
        printf("%d\t",q->data);
        q = q->next;
    }
    printf("\n");
}

输出结果为:

30  20  10  
20  10  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值