美文网首页数据结构
数据结构重学日记(十一)栈

数据结构重学日记(十一)栈

作者: 南瓜方糖 | 来源:发表于2019-01-12 23:17 被阅读3次

概念

只允许在一端进行插入或删除操作的线性表。

栈顶

栈中允许进行插入和删除的那一端。

栈底

固定的,不允许进行插入和删除的另一端。

C -- new top
B -- top
A -- bottom

栈的特点

  • 栈是受限的线性表,所以依然具有线性关系
  • 栈中的元素遵循先入后出

顺序栈

栈是线性表的特例,栈的顺序存储是线性表顺序存储的简化。

栈的顺序存储结构也叫做顺序栈

实现


#define MaxSize 50
typedef int ElemType;

typedef struct {
    ElemType data[MaxSize];
    int top;

}SqStack;

  • top 值不能超过 MaxSize
  • 空栈的判定条件通常定位 top == -1
  • 满栈的判定条件通常为 top == MaxSize -1
  • 栈中数据元素个数为 top + 1

顺序栈的操作


#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int top;

}SqStack;

int StackEmpty(SqStack S){
    if(S.top == 1) return 1;
    else return 0;
}


int Push(SqStack * S, ElemType * x){
    if(S->top == MaxSize - 1) return 0;
    S->data[++S->top] = x; // 上移指针并赋值
    return 1;
}

int Pop(SqStack * S, ElemType * x){
    if(S->top == 1) return 0;
    x = S->data[S->top --];
    return x;
}

int GetTop(SqStack * S, ElemType * x){
    if(S->top == -1) return 0;
    x = S->data[S->top];
    return x;
}

共享栈

即把存储空间共享的栈。

0 1 2 3 4 5 6 7 8 9
A B E D C B A

左边 A 为栈1 的底,右边 A 为栈2 的底。

栈满的条件:指针 top1 + 1 = top2

实现


#define MaxSize 100
typedef struct{
    ElemType data[MaxSize];
    int top1;
    int top2;
}SqDoubleStack;

进栈操作


int PushD(SqDoubleStack * S, ElemType x, int StackNum){
    if(S->top1 + 1 == S->top2) return 0; // 栈满
    if(StackNum == 1) S->data[++S->top1] = x; // 栈1有元素进栈
    else if(StackNum == 2) S->data[--S->top2] = x; // 栈2 有元素进栈
    return 1;
}

相关文章

  • 数据结构重学日记(十一)栈

    概念 只允许在一端进行插入或删除操作的线性表。 栈顶 栈中允许进行插入和删除的那一端。 栈底 固定的,不允许进行插...

  • 数据结构重学日记(十四)栈的应用

    括号匹配 假设有两种括号,一种圆的(),一种方的[],嵌套顺序任意。 例如: ([]) ([][([])]) 如果...

  • 重学数据结构-栈与队列

    栈(Stack) Last In First Out(LIFO) 后进先出 栈也是一种线性数据结构 代码实现栈 考...

  • 栈和队列

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

  • 004 go语言实现栈

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

  • java高级知识点

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

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

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

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

  • 2019-07-11—栈

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

  • 什么是堆栈?

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

网友评论

    本文标题:数据结构重学日记(十一)栈

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