栈(顺序存储结构)

  • 堆栈:具有一定操作约束的线性表,只能在一端作插入、删除
  • 具有后入先出的特性(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;
}

原文地址:https://www.cnblogs.com/WakingUp/p/8543398.html

时间: 2024-11-10 07:16:15

栈(顺序存储结构)的相关文章

数据结构之栈——顺序存储结构(php代码实现)

<?php /**     1. DestroyStack(): 栈的销毁     2. ClearStack(): 将栈置为空栈     3. StackEmpty(): 判断栈是否为空     4. StackLength(): 返回栈的长度     5. GetTop(): 取得栈顶的元素     6. Push(): 插入新的栈顶元素     7. Pop(): 删除栈顶元素     8. StackTraverse(): 遍历栈元素  */ //除了push和pop方法外,其余的方法和

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

栈的顺序存储结构及及其实现

由于栈是线性结构的一种,所以,栈也可以通过顺序存储结构实现. 因为,线性表的顺序存储结构是通过数组实现的,所以,栈的顺序存储结构也通过数组实现.不可避免的,要设置栈的最大存储空间.因为,栈只允许在栈顶进行元素的插入与删除操作,所以需要一个指向栈顶的变量top.那么栈的存储结构: typedef int SElemType; typedef struct{     SElemType data[MAXSIZE];     int top; }SqStack; 接着,就是插入一个新的元素e,也就是进

Java数据结构系列之——栈(1):栈的顺序存储结构及操作

package Stack; /** * 栈的定义:限定只在表末尾进行增加和删除操作的线性表 * 栈的特点:先进后出FILO(First In Last Out) * 通常我们把允许插入和删除的一段称为栈顶(top),另一端 * 称为栈底,不包含任何元素的栈称为空栈 * 栈的出栈操作我们一般称为进栈或者压栈或者入栈 * 栈的删除操作我们一般称为出栈或者弹栈 * * 这里我们用数组来实现栈的顺序存储结构及各种操作 * @author wl * */ public class MyStack { p

数据结构:栈的顺序存储结构及实现

栈的定义和抽象数据类型 栈是限定仅在表尾进行插入和删除操作的线性表.所以说栈也是线性表,栈元素具有线性关系,即前驱后继关系. 其抽象数据类型: ADT 栈(Stack) Data 同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系. Operation InitStack(*S): 初始化操作,建立一个空栈S. DestroyStack(*S): 若栈存在,则销毁它. ClearStack(*S): 将栈清空. StackEmpty(S): 若栈为空,返回true,否则返回false. G

数据结构(六)栈的顺序存储结构

一.栈的定义 1.栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 2.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈.栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构. 3.栈的插入操作,叫做进栈(push),也称压栈.入栈:栈的删除操作,叫做出栈(pop),也称弹栈. 4.栈的顺序存储结构:既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化.数组下标为0的一端作为栈底,定义一个top

3.1 栈的顺序存储结构

<?php header("content-type:text/html;charset=utf-8"); /** * 栈的顺序存储结构的基本操作 * *包括 * 1.顺序栈的初始化 __contruct() * 2.销毁栈 destroyStack() * 3.清空栈 clearStack() * 4.判断栈是否为空 stackEmpty() * 5.获取栈顶元素 getTop() * 6.进栈操作 push() * 7.出栈操作 pop() * 8.遍历栈元素 travers

栈的顺序存储结构及应用(C、Java代码)

栈的定义: 栈(stack)是限定仅在表尾进行插入和删除的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,不包含任何数据元素的栈称为空栈,栈又称为先进后出的线性表,简称LIFO结构. 栈的插入操作:叫做进栈,或压栈.入栈. 栈的删除操作:叫做,出栈,或者弹栈. 栈的结构定义 1 /*栈的结构定义*/ 2 typedef int sElemType; //sElemType类型定义为int 3 typedef struct { 4 5 sElemType

数据结构:队列的顺序存储结构【转】

本文转载自:http://blog.csdn.net/jnu_simba/article/details/8841657 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.是一种先进先出的线性表(FIFO).允许插入的一端称为队尾,允许删除的一端称为队头.我们在<栈的顺序存储结构>中发现,栈操作的top指针在Push时增大而在Pop时减小,栈空间是可以重复利用的,而队列的front.rear指针都在一直增大,虽然前面的元素已经出队了,但它所占的存储空间却不能重复利用