`
chinrui
  • 浏览: 96759 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

顺序栈的实现

阅读更多
#include <iostream>
#include <stdlib.h>

#define INIT_SIZE 3
#define INCREASE_SIZE 1

using namespace std;

typedef int Elemtype;
typedef struct {
    Elemtype *base;
    Elemtype *top;
    int iStackSize;
} myStack;

//函数声明
void initStack(myStack &);
void showStack(myStack &);
void push(myStack & , Elemtype);
void addStackValues(myStack & , int);
Elemtype getTopValue(myStack &);
Elemtype pop(myStack &);
Elemtype searchStack(myStack & , int);

int main()
{
    //初始化一个空的栈空间
    myStack ms;
    initStack(ms);
    //给栈空间添加元素
    int iAddCount;
    cout << "输入要添加的元素个数:" << endl;
    cin >> iAddCount;
    cout << "输入要添加元素的值:" << endl;
    addStackValues(ms , iAddCount);

    //输出栈空间里面的元素值
    cout << "栈里面的元素值为:" << endl;
    showStack(ms);

    //删除栈顶元素
    Elemtype ePop = pop(ms);
    cout << "删除值为:" << ePop << endl;
    cout << "删除后,栈空间的元素值为:" << endl;
    showStack(ms);

    //获取栈顶元素
    cout << "栈顶元素值为:" << getTopValue(ms) << endl;

    //向栈空间中添加元素
    cout << "输入要添加的元素:" << endl;
    Elemtype eInput;
    cin >> eInput;
    push(ms , eInput);
    cout << "添加后元栈空间元素值为:" << endl;
    showStack(ms);

    //查找栈空间元素
    int iSearchIndex;
    cout << "输入要查找元素的地址值:" << endl;
    cin >> iSearchIndex;
    Elemtype eSearchResult = searchStack(ms , iSearchIndex);
    cout << "第" << iSearchIndex << "位的元素为:" << eSearchResult << endl;

    return 0;
}

//显示栈里面所有元素
void showStack(myStack &ms) {
    Elemtype *curr = ms.top;
    while(curr > ms.base) {
        curr--;
        cout << *(curr) << " ";
    }
    cout << endl;
}

//初始化栈空间
void initStack(myStack &ms) {
    ms.base = (Elemtype *)malloc(INIT_SIZE * sizeof(Elemtype));
    ms.top = ms.base;
    ms.iStackSize = INIT_SIZE;
}

//给栈空间加入元素值
void addStackValues(myStack &ms , int times) {
    Elemtype value;
    for(int i = 0; i < times; i++) {
        cin >> value;
        push(ms , value);
    }
}

//向栈空间中添加一个元素值
void push(myStack &ms , Elemtype elem) {
    //length记住元素的个数,判断栈空间的内存是否已满,若已满则再开辟空间
    int length = ms.top - ms.base;
    if(length >= ms.iStackSize) {
        ms.base = (Elemtype *)realloc(ms.base , (ms.iStackSize + INCREASE_SIZE) * sizeof(Elemtype));
        if(!ms.base) {
            cout << "元素添加失败!" << endl;
        }
        ms.top = ms.base + length;
        ms.iStackSize = ms.iStackSize + INCREASE_SIZE;
    }
    //将元素加入栈空间
    *(ms.top) = elem;
    ms.top++;
}

//获得栈顶元素
Elemtype getTopValue(myStack &ms) {
    return *(ms.top - 1);
}

//移除栈顶元素
Elemtype pop(myStack &ms) {
    //判断栈是否为空
    if(ms.top == ms.base) {
        cout << "栈空间没有元素存在!" << endl;
        return -1;
    }
    //移除栈顶元素,并把栈顶元素做返回值返回
    ms.top--;
    return *(ms.top);
}

//查找相应位置的元素值
Elemtype searchStack(myStack &ms , int index) {
    Elemtype *curr = ms.top;
    if(index > ms.top - ms.base) {
        cout << "查找的元素不存在!" << endl;
    }
    //移动到相应的元素位置
    for(int i = 0; i < index; i++) {
        curr--;
    }
    return *(curr);
}
分享到:
评论

相关推荐

    顺序栈实现括号配对

    顺序栈实现括号配对 在计算机科学中,括号配对是指在一个表达式中,各种括号之间的匹配关系。例如,在一个数学表达式中,我们可以使用小括号、中括号和大括号来表示不同的操作优先级。然而,在实际应用中,我们需要...

    顺序栈实现

    顺序栈是一种特殊的线性数据结构,它遵循“后进先出”(LIFO)的原则,即最后进入的元素最先离开。在计算机科学中,栈常用于执行表达式求值、括号匹配、函数调用、内存管理等多种任务。C++ 是一种通用的编程语言,以...

    使用顺序栈实现括号匹配

    这里我们讨论的主题是"使用顺序栈实现括号匹配",这是一个常见的算法问题,尤其在编译原理、数据结构和算法课程中经常出现。顺序栈是一种基本的数据结构,它具有操作简单、效率较高的优点,非常适合用于解决此类问题...

    C语言-顺序栈实现十进制转换为二进制-八进制-十六进制

    ### C语言顺序栈实现十进制到二进制、八进制、十六进制的转换 #### 一、概述 本篇文章将详细介绍如何使用C语言中的顺序栈来实现十进制数字向二进制、八进制以及十六进制的转换。通过分析给出的代码示例,我们将...

    用顺序栈实现括号匹配检查

    这里我们关注的是使用顺序栈来解决这个问题。顺序栈是一种数据结构,它利用数组来存储元素,遵循后进先出(LIFO)的原则,非常适合处理这种配对问题。 首先,我们要理解括号匹配的基本概念。在编程语言中,常见的...

    二叉树遍历顺序栈实现

    自己真正实现的 完整的代码 二叉树的实验代码 看别人写没有用 还得自己写 写出了就会了

    利用顺序栈实现中缀表达式的计算问题

    本资源是数据结构中利用顺序栈计算中缀表达式的一个C++代码,仅供参考,不足之处请大神们指正.

    用C语言顺序栈实现十进制和二进制的转换.docx

    用C语言顺序栈实现十进制和二进制的转换 本文档主要讲解了使用C语言实现顺序栈来实现十进制和二进制的转换。下面是相关的知识点: 1. 顺序栈的定义和实现 在C语言中,顺序栈可以使用结构体来定义。这里我们定义了...

    表达式求值顺序栈实现包括小数点运算(C语言版).docx

    该文档涉及的知识点主要集中在C语言中如何使用顺序栈实现表达式求值,特别是涉及到小数点运算。这里我们将详细探讨这个过程。 首先,我们创建了两个顺序栈:`seqstack optr` 和 `seqstack opnd`。`optr` 用于存储...

    java模拟顺序栈实现回文串的判断

    本主题将探讨如何使用Java语言通过模拟顺序栈来判断一个字符串是否为回文串。这个方法对于初学者来说是很好的实践,因为它涉及到基础的数据结构——栈,以及字符串处理技巧。 首先,我们需要理解栈(Stack)这种...

    数据结构实验课之单链表类实现和顺序栈实现

    1、 定义顺序栈类。 2、 实现如下算法: 1) 创建顺序栈; 2)插入操作:向栈顶压入值为 x 的元素; 3) 删除操作: 弹出栈顶元素,将数据输出在屏幕上; 4) 存取操作:读取栈顶元素,将数据输出在屏幕上;。 3、 ...

    顺序栈实现源码(C、C++、Java)

    本主题将深入探讨顺序栈的实现,包括C、C++和Java三种编程语言的源码分析。 首先,我们从C语言的角度来理解顺序栈。在C中,我们通常使用数组作为基础数据结构来实现顺序栈。以下是一个简单的顺序栈定义: ```c #...

    【数据结构】用c实现顺序栈

    用c实现顺序栈 c实现顺序栈 c顺序栈 顺序栈实现 用c实现顺序栈 c实现顺序栈 c顺序栈 顺序栈实现

    数据结构用顺序栈实现汉诺塔

    数据结构用栈实现汉诺塔,用递归给你讲吧,先想这个棵树Tn,先把最下面的n要搬走,就得把上面的n-1个先搬走,这个n-1个也形成一个树T(n-1),然后又把这n-1个搬到n上面又形成一个T(n-1)的树,这个你就可以画出来...

    顺序栈、链栈将10进制转为2、8、16进制源码

    本话题聚焦于一种特定的应用——使用C++实现的顺序栈和链栈,将10进制数转换为2、8、16进制。这里我们将深入探讨顺序栈和链栈的概念,以及它们如何应用于不同进制之间的转换。 首先,顺序栈是一种基于数组的数据...

    用顺序栈实现的十进制到二到九进制数的任意转换,用c实现

    这里我们关注的是如何使用顺序栈来实现从十进制到二到九进制之间的任意转换,这个过程主要涉及到计算机科学中的算法设计和数据结构。顺序栈是一种特殊的线性数据结构,它具有后进先出(LIFO)的特点,即最后压入的...

    继承实现顺序栈学习代码示例

    在传统的顺序栈实现中,通常会包含以下几个关键操作: 1. 初始化:创建一个空的栈,通常需要一个数组和一个指示当前栈顶位置的变量。 2. 入栈(push):向栈顶添加元素,需要检查栈是否已满,若未满则将元素存入...

    C++ 顺序栈和链式栈的实现 数据结构 类模板

    以下是一个简单的顺序栈实现: ```cpp template class SequentialStack { private: int top; // 栈顶指针 int capacity; // 栈的容量 T* elements; // 存储元素的数组 public: SequentialStack(int size) : ...

    顺序栈的实现.zip

    这个程序实现了顺序栈的初始化,入栈,出栈、取顺序栈的顶栈元素,退出的作用。/***顺序栈的实现***/ #include #include using namespace std; //顺序栈定义 #define OK 1 #define ERROR 0 #define ...

Global site tag (gtag.js) - Google Analytics