ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【数据结构】【C++】堆栈的实现与应用

2020-01-24 12:56:09  阅读:216  来源: 互联网

标签:ElementType return Top C++ MaxSize 堆栈 数据结构 Stack


堆栈(Stack)

参考浙大版《数据结构(第2版)》

  • 堆栈可以认为是具有一定约束的线性表,插入和删除的操作都在栈顶的位置,先进入的元素将在后进入的元素之后取出,与生活中的桶类似,故又称为后入先出(Last In First Out,LIFO)表。

    非STL的堆栈实现:

  • 手写的堆栈主要有以下几种基本操作:

    • Stack CreateStack(int MaxSize):生成空堆栈,其最大长度为MaxSize;
    • bool IsFull(Stack S):判断堆栈S是否已满。若S中的元素个数等于MaxSize则返回true,否则返回false;
    • bool Push(Stack S, ElememtType X):将元素X压入堆栈。若堆栈已满,返回false;否则将元素X插入到堆栈S栈顶处并返回true;
    • bool IsEmpty(Stack S):判断堆栈S是否为空,若是返回true;否则返回false;
    • ElementType Pop(Stack S):删除并返回栈顶元素,若堆栈为空则返回错误信息;

    堆栈的顺序储存实现

  • 顺序栈类型定义如下(以整数为例):
typedef int ElementType;
typedef int Position;
typedef struct SNode * Stack;
struct SNode
{
    ElementType * Date;
    Position Top;
    int MaxSize;
};
  • 顺序栈以上操作的代码实现:
//生成空堆栈
Stack CreateStack(int MaxSize)
{
    Stack S = (Stack)malloc(sizeof(struct SNode));
    S ->Date = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    S ->Top = -1;
    S ->MaxSize = MaxSize;
    return S;
}
//判断堆栈是否已满
bool IsFull(Stack S)
{
    return (S ->Top == S ->MaxSize);
}
//圧栈操作
bool Push(Stack S, ElementType x)
{
    if(IsFull(S)) return 0;
    else 
    {
        S ->Date[++(S ->Top)] = x;
        return 1;
    }
}
//判断堆栈是否为空
bool IsEmpty(Stack S)
{
    return (S ->Top == -1);
}
//弹出栈操作
ElementType Pop(Stack S)
{
    if(IsEmpty(S)) return ERROR;
    else 
    {
        return (S ->Date[(S ->Top)--]);
    }
}

未完待续……

标签:ElementType,return,Top,C++,MaxSize,堆栈,数据结构,Stack
来源: https://www.cnblogs.com/sdutzxr/p/12232004.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有