栈(顺序存储结构)

Posted wakingup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈(顺序存储结构)相关的知识,希望对你有一定的参考价值。

  • 堆栈:具有一定操作约束的线性表,只能在一端作插入、删除
  • 具有后入先出的特性(Last In First Out)
  • 顺序存储结构、链式存储结构两种形式



堆栈的顺序存储结构

通常由一个一维数组和一个栈顶元素变量组成

图解如下:

技术分享图片

技术分享图片

技术分享图片






形式一:构建结构体

0、结构初始化

#define MaxSize ###
struct StackNode {
    ElementType Data[MaxSize];
    int top;
};


1、建立空栈

struct StackNode* createStack() {
    struct StackNode* s=malloc(sizeof(struct StackNode));
    s->top=-1;

    return s;
}


2、push操作

void push(struct StackNode* s,ElementType x) {
    if (s->top!=MaxSize-1)
        return s->Data[++(s->top)]=x;
    else
        return NULL;
}


3、pop操作

ElementType pop(struct StackNode* s) {
    if (s->top!=-1)
        return s->Data[(s->top)--];
    else
        return NULL;
}

4、peek操作

ElementType peek(struct StackNode* s) {
    if (s->top!=-1)
        return s->Data[s->top];
    else
        return NULL;
}






形式二:简易模式

也可以省略结构体部分,直接声明数组,在函数中构建堆栈

//举例020 Valid Parentheses 这一题
bool isValid(char* s) {
    int len=strlen(s);
    if (*s==NULL) return false;
    if (len%2==1) return false;

    char stack[1000000];
    int top=-1;

    while (*s) {
        char c=*s;
        if (c==‘(‘||c==‘{‘||c==‘[‘) {
            stack[++top]=c;
        }
        else {
            if (c==‘)‘&&top>=0&&stack[top]==‘(‘)
                top--;
            else if (c==‘]‘&&top>=0&&stack[top]==‘[‘)
                top--;
            else if (c==‘}‘&&top>=0&&stack[top]==‘{‘)
                top--;
        }
        s++;
    }

    return top==-1;
}



















以上是关于栈(顺序存储结构)的主要内容,如果未能解决你的问题,请参考以下文章

C/C++数据结构-完整代码栈(栈的顺序存储,栈的链式存储,就近匹配,中缀表达式和后缀表达式)

Python数据结构系列❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

C/C++数据结构-完整代码受限线性表:栈(栈的顺序存储,栈的链式存储,就近匹配,中缀表达式和后缀表达式)

栈(顺序存储结构)

数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

数据结构学习笔记——顺序存储结构实现栈