美文网首页
数据结构②——栈

数据结构②——栈

作者: besmallw | 来源:发表于2020-01-05 22:23 被阅读0次

栈定义

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(转自百度百科)

这里我的做法是:初始化的时候先分配一段栈空间,当空间不足时,再重新分配空间
top是指向栈顶元素的下一个(比如初始的栈顶top = 0,当插入一个元素后,插入的元素放在 0 处,然后top = 1,1 这个地方是没有实际元素的)

1.栈的数据结构

#define ALLOC_SIZE   512  // 初始的栈空间
typedef int KEY_TYPE;  // 需要存的数据的数据类型。这里可以更改为自定义的结构体

typedef struct _stack {
    KEY_TYPE *base;  // 初始的栈空间    
    int top;         // 栈顶
    int stack_size;  // 当前栈空间大小
} stack;

2.栈的初始化

包括分配空间,栈顶指向0,栈大小为ALLOC_SIZE

void init_stack(stack *s) {
    s->base = (KEY_TYPE*)calloc(ALLOC_SIZE, sizeof(KEY_TYPE)); // 分配空间
    assert(s->base);

    s->top = 0;
    s->stack_size = ALLOC_SIZE;
}

3.入栈

先对栈s检查。然后判断栈空间是否满了。如果是满的,先重新分配空间,再插入元素

void push_stack(stack *s, KEY_TYPE data) {
    assert(s);
    if (s->top >= s->stack_size) { // 空间不足,重新分配空间
        s->base = (KEY_TYPE*)realloc(s->base, (s->stack_size + ALLOC_SIZE) * sizeof(KEY_TYPE));
        assert(s->base);

        s->stack_size += ALLOC_SIZE;
    }
    s->base[s->top] = data; // 插入数据到栈顶
    s->top++;  // top指向下一个
}

4.出栈

void pop_stack(stack *s, KEY_TYPE *data) { // 取出栈顶元素
    assert(s);
    *data = s->base[--s->top]; // 这里相当于  s->top--;  *data = s->base[s->top];
}
  • 其实到这里,核心操作就入栈和出栈。但是,要明白一点的是:出栈的时候,只是改变了top的指向,并没有将这个数据空间释放掉,下面介绍如何释放栈空间。

5.销毁栈

void destory_stack(stack *s) { // 销毁栈
    assert(s);

    free(s->base);
    s->base = NULL;
    s->stack_size = 0;
    s->top = 0;
}
  • 对比下3、4、5步,就可以发现,刚才说的——出栈并没有释放数据空间

2020.1.5 22:23 广州

相关文章

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • java高级知识点

    1.数据结构 程序=数据结构+算法 栈:后进先出,线性结构 入栈:push 出栈:pop假如已知入栈顺序是ab...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 数据结构与算法 第二节:栈 栈: 一种先进后出的数据结构。可以想象成手枪的弹夹。 栈的特点: 栈的行为: 栈的代...

  • 2019-07-11—栈

    栈:Java数据结构和算法(四)——栈 string和char一般这么转化: 21、定义栈的数据结构,请在该类型中...

  • 什么是堆栈?

    堆与栈是两种数据结构,并不是一种数据结构,堆是堆,栈是栈。 1、栈:是一种只能在一端进行插入和删除的数据结构。 允...

  • 05--栈 递归

    栈 栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线...

  • 18-04-21 python3 算法笔记 002基本数据结构

    线性数据结构 栈,队列,deques,列表其元素在数据结构中的位置由它被添加时的顺序决定。 栈 后进先出栈 LI...

  • 数据结构

    数据结构:要写!!手动!!数据结构非常简洁才可 栈 eg. 弹栈压栈的过程 链表 就是原型链不断的连接,要断去某个...

网友评论

      本文标题:数据结构②——栈

      本文链接:https://www.haomeiwen.com/subject/bwwcactx.html