美文网首页
数据结构基础--顺序栈

数据结构基础--顺序栈

作者: HardCabbage | 来源:发表于2020-06-15 14:17 被阅读0次

顺序栈的概念:顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中数据元素,由于人栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录当前栈顶元素在数组中的位置(来自百科)。


栈结构图

空栈:top=-1代表着为空栈


空栈

顺序栈的结构

  • 我们可以根据概念来设计一个栈结构
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status;
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */

/* 顺序栈结构 */
typedef struct
{
    SElemType data[MAXSIZE];
    int top; /* 用于栈顶指针 */
}SqStack;

如何构建一个空栈

空栈我们只需要将栈顶指针设置为-1即可

Status InitStack(SqStack *S){
   //构建空栈
    S->top = -1;
    return OK;
}

如何将一个顺序栈置空

将栈置空,需要将顺序栈的元素都清空吗?不需要,只需要修改top标签就可以了,和构建空栈相同,只需要将top =-1。

Status ClearStack(SqStack *S){
    S->top = -1;
    return OK;
}

判断顺序栈是否为空

判断一个栈是不是空,只需要判断top是不是-1。

Status StackEmpty(SqStack S){
    if (S.top == -1)
        return TRUE;
    else
        return FALSE;
}

获取栈的长度

栈的长度的获取,我们可以根据栈顶指针来计算,由于顺序栈采用的是顺序存储结构,第一个存储位置top=0开始的,所以我们可以有栈顶指针+1来计算

int StackLength(SqStack S){
    return S.top + 1;
}

获取栈顶元素

Status GetTop(SqStack S,SElemType *e){
    if (S.top == -1)
        return ERROR;
    else
        *e = S.data[S.top];
   
    return OK;
    
}

插入元素e为新栈顶元素(push入栈)

先要安全判断,判断栈是否已经满了,如果已将满了返回ERROR,否则插入元素,将top++

Status PushData(SqStack *S, SElemType e){
    
    //栈已满
    if (S->top == MAXSIZE -1) {
        return ERROR;
    }
    
    //栈顶指针+1;
    S->top ++;
    //将新插入的元素赋值给栈顶空间
    S->data[S->top] = e;
    
    return OK;
}

删除S栈顶元素,并且用e带回(pop出栈)

  • pop 的时候为防止意外发生,先判断是不是空栈
  • 获取栈顶元素,然后返回该元素
  • 将栈顶指针减1
Status Pop(SqStack *S,SElemType *e){
   
    //空栈,则返回error;
    if (S->top == -1) {
        return ERROR;
    }
    
    //将要删除的栈顶元素赋值给e
    *e = S->data[S->top];
    //栈顶指针--;
    S->top--;
    
    return OK;
}

栈的遍历

Status StackTraverse(SqStack S){
    int i = 0;
    printf("此栈中所有元素");
    while (i<=S.top) {
        printf("%d ",S.data[i++]);
    }
    printf("\n");
    return OK;
}

总结:先入后出

相关文章

  • 栈与栈的实现

    栈 栈是一种基础的数据结构,只从一端读写数据。基本特点就”后进先出“,例如顺序入栈1,2,3,4,5,再顺序出栈是...

  • 数据结构基础--顺序栈

    顺序栈的概念:顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中...

  • 【数据结构】【C#】005-栈:💫顺序栈

    C#数据结构:顺序栈 1、自定义顺序栈结构: 顺序栈:测试用例 输出结果: img.jpg 注意: 1、栈也是表结...

  • 基于顺序存储/链式存储设计栈结构

    基于顺序存储/链式存储设计栈结构 栈限定性数据结构,先进后出。 顺序存储栈 链式存储栈

  • 数据结构面试题(三)

    1、 常用数据结构简介 a、数组:顺序存储,随机访问 链表:链表存储,顺序访问b、栈,分为栈顶和栈底,遵循先...

  • java高级知识点

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

  • 数据结构之栈的链式存储结构

    之前写了栈的顺序存储结构,对栈的定义和操作进行了说明 数据结构之栈的顺序存储结构 现在接着写栈的链式存储结构 栈的...

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

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

  • 栈(C实现)

    1. 顺序栈 顺序栈的数据结构就是将一个数组的一端作为栈底,另一端为栈顶: 定义栈的数组; 设置栈的容量; 设置t...

  • 数据结构

    数据结构 数据结构概念 顺序表 链表 队列 栈 二叉树 常用排序算法

网友评论

      本文标题:数据结构基础--顺序栈

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