堆栈

作者: China第一程序员 | 来源:发表于2018-11-22 13:59 被阅读15次

堆栈

定义

堆栈是一种只允许在表的一端进行插入操作和删除操作的线性表。允许操作的一端称为栈顶,栈顶元素的位置由一个称为栈顶指针的变量给出。当表中没有元素时,称之为空栈。
由于堆栈只允许在一端操作,后进入的数据往往会先处理,简称为后进先出,如下图

堆栈的基本操作

1、插入(进栈、入栈)
2、删除(出栈、退栈)
3、测试堆栈是否为空
4、测试堆栈是否已满
5、检索当前栈顶元素
其操作收到位置的限制,所以只是一般线性表操作的一个子集。

堆栈的顺序存储结构和操作

1、构造原理
描述堆栈的顺序存储结构最简单的方法是利用一维数组STACK[ 0: M–1 ]来表示,同时定义一个整型变量(不妨取名为top)给出栈顶元素的位置,如下图

C语言实现如下:

#define M 1000
SElemType STACK[M];
int top;

2、初始化堆栈

void INITIALS( int top ){
    top= –1;
}

3、测试堆栈是否为空

int EMPTYS( int top ){
    return top == –1;
}

4、测试堆栈是否已满

int FULLS( int top ){
    return top==M–1;
}

5、插入(进栈)算法

int PUSH( SElemType STACK[ ], int top, SElmeType item ){
    if( FULLS(top) )
        return 0;
    else {
        STACK[++top]=item;
        return 1;
    }
}

6、删除(出栈)算法

int POP( SElemType STACK[ ], int top, SElemType item ){
    if( EMPTYS(top) )
        return 0;
    else{
        item=STACK[top--];
        return 1;
    }
}

堆栈的链式存储结构

1、构造原理
链接堆栈就是用一个线性链表来实现一个堆栈结构, 同时设置一个指针变量( 这里不妨仍用top表示)指出当前栈顶元素所在链结点的位置。栈为空时,有top=NULL。如下图

C语言实现如下:

typedef struct node { 
    SElmeType data;
    struct node *link;
} STNode, *STLink;

2、堆栈初始化

void INITIAL( STLink top ){
    top=NULL;
}

3、测试堆栈是否为空

int EMPTYS( STLink top ){
    return top==NULL;
}

4、插入(进栈)算法

int PUSHLINK( STLink top, SElemType item ){ 
    STLink p;
    if( !(p=(STLink)malloc(sizeof(STNode)) )          //申请一个新的链节点
        return 0; 
    else{
        p->data=item;      /*将item送新结点数据域*/
        p->link=top;         /*将新结点插在链表最前面*/
        top=p;                 /*修改栈顶指针的指向*/
        return 1;
    }
}

5、删除(退栈)算法

int POPLINK( STLink top, SElemType item ){ 
    STLink p;
    if ( EMPTYS(top) ) 
        return 0;       /* 删除失败*/
    else {
        p=top;          /* 暂时保存栈顶结点的地址*/
        item=top->data;             /*保存被删栈顶的数据信息*/
        top=top->link;               /* 删除栈顶结点*/
        free(p);                         /* 释放被删除结点*/
        return 1;                       /* 删除成功*/
    }
}

相关文章

  • Go 堆栈的理解

    在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈...

  • 三种常见的计算模型

    堆栈机 堆栈机,全称为“堆栈结构机器”,即英文的 “Stack Machine”。基于堆栈机模型实现的计算机,无论...

  • 初识堆栈

    什么是堆栈 引出堆栈 在学习堆栈之前,我们需要从之前寄存器和内存中引出堆栈,我们要思考堆栈有什么必要性?现在假设我...

  • Linux内核——用户堆栈和内核堆栈

    定义 每个进程都有用户堆栈和内核堆栈两个堆栈。进程在用户态时使用用户堆栈,陷入到内核态时便使用内核堆栈。 切换过程...

  • 数据结构和算法(三) - 栈

    堆栈数据结构在概念上与物理的堆栈相同。将元素添加到堆栈时,将其放在堆栈顶部。从堆栈中删除元素时,始终会删除最顶层的...

  • crash之野指针

    例子一 堆栈信息 根据堆栈分析:1,野指针2,有对应的堆栈查看堆栈代码,看那些有可能野指针: 分析所有参数:url...

  • ARM栈结构

    ARM 栈类型 根据栈生长方向,ARM的栈可分为递增堆栈和递减堆栈。 递增堆栈:栈向高地址生长 递减堆栈:栈向低地...

  • 查看JVM信息的命令

    1. jstack 获取线程堆栈信息 打印堆栈信息到标准输出 jstack PID 打印堆栈信息到标准输出,会打印...

  • 20.有效括号

    检测括号对 (),{},[]是否有效。 思路:利用堆栈。遇到左括号压入堆栈,遇到右括号从堆栈弹出并比较。注意(),...

  • 在Python中实现两个堆栈的队列

    在Python中实现两个堆栈的队列。数据结构了解堆栈和队列。然后用两个堆栈实现一个队列。堆栈和队列都是列表。但它们...

网友评论

    本文标题:堆栈

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