菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
373
0

原创
05/13 14:22
阅读数 82998

顺序栈

// 顺序栈
#pragma once

#include <stdio.h>

#define maxSize 100

// 定义
typedef int ElemType;
typedef struct {
    ElemType data[maxSize];
    int top; //栈顶指针
} SeqStack;

//初始化
void initStack(SeqStack &s) {
    s.top = -1; //假设指向栈顶,所以刚开始没有元素是-1,初始也可以设为0,不过代码相应作出改变
}

//判断空
bool isEmpty(SeqStack s) {
    return s.top == -1;//空就返回true
}

//进栈
bool push(SeqStack &s, ElemType x) {
    if (s.top == maxSize - 1) return false;//已满
    s.data[++s.top] = x;
    return true;
}
//出栈,由x带回
bool pop(SeqStack &s, ElemType &x){
    if (s.top == -1) return false;//栈空
    x = s.data[s.top--];
    return true;
}

// 读取栈顶元素
ElemType getTop(SeqStack s){
    if (s.top == -1) return false;
    return s.data[s.top];
}

链式栈

// 链式栈
#pragma once

#include <stdio.h>
# include <stdlib.h>

#define maxSize 100

// 定义
typedef int ElemType;
typedef struct Node {
    struct Node *next;
    ElemType data;
} LinkNode, *LinkStack;

//初始化,这里是带头节点的
void initStack(LinkStack &s) {
    s = (LinkNode *) malloc(sizeof(LinkNode));
    s->next = NULL;
}


//判断空
bool isEmpty(LinkStack s) {
    return s->next == NULL;//空就返回true
}

//进栈
bool push(LinkStack &s, ElemType x) {
    LinkNode *p = (LinkNode *) malloc(sizeof(LinkNode));
    p->data = x;
    p->next = s->next;
    s->next = p;
    return true;
}

//出栈,由x带回
bool pop(LinkStack &s, ElemType &x) {
    if (s->next == NULL) return false;
    LinkNode *p = s, *q = s->next;
    x = q->data;
    p->next = q->next;
    free(q);
    q = NULL;
    return true;
}

// 读取栈顶元素
ElemType getTop(LinkStack s) {
    if (s->next == NULL) return false;
    return s->next->data;
}

void showData(LinkStack s) {
    LinkNode *p = s->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main() {
    LinkStack s = NULL;
    initStack(s);
    //push
    for (int i = 0; i < 10; ++i) {
        push(s, i);
    }
    showData(s);
    //pop
    ElemType x;
    pop(s, x);
    showData(s);
    printf("%d \n", x);
    //get
    printf("%d \n", getTop(s));

    return 0;
}
9 8 7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9
8

Process finished with exit code 0

发表评论

0/200
373 点赞
0 评论
收藏
为你推荐 换一批