栈 - 数据结构C++实现

参考链接:数据结构探险—栈篇

学了队列之后,栈就很简单了,换汤不换药。

课程笔记:


栈的模型

栈的编程实现

栈的基本元素

栈的基本操作

基本操作的实现

C++实现步骤

标准C++代码

//MyStack.h
#pragma once
class MyStack
{
public:
    MyStack(int size);
    ~MyStack();
    bool stackEmpty();
    bool stackFull();
    void clearStack();
    int stackLength();
    bool push(char elem);
    bool pop(char &elem);
    void stackTraverse();
private:
    char *m_pBuffer;
    int m_iSize;
    int m_iTop;
};
//MyStack.cpp
#include"MyStack.h"
#include<iostream>
using namespace std;

MyStack::MyStack(int size)
{
    m_iSize = size;
    m_pBuffer = new char[size];
    m_iTop = 0;
}

MyStack::~MyStack()
{
    delete[]m_pBuffer;
}

bool MyStack::stackEmpty()
{
    if (0 == m_iTop)
    {
        return true;
    }
    return false;
}

bool MyStack::stackFull()
{
    if (m_iTop == m_iSize)
    {
        return true;
    }
    return false;
}

void MyStack::clearStack()
{
    m_iTop = 0;
}

int MyStack::stackLength()
{
    return m_iTop;
}

bool MyStack::push(char elem)
{
    if (stackFull())
    {
        return false;
    }
    m_pBuffer[m_iTop] = elem;
    m_iTop++;
    return true;
}

bool MyStack::pop(char &elem)
{
    if (stackEmpty())
    {
        return false;
    }
    m_iTop--;
    elem = m_pBuffer[m_iTop];
    return true;

}

void MyStack::stackTraverse()
{
    for (int i = 0; i < m_iTop; i++)
    {
        cout << m_pBuffer[i] << ",";
    }
}
//demo.cpp
#include<iostream>
#include"MyStack.h"
using namespace std;

int main()
{
    MyStack *p = new MyStack(5);

    p->push(‘h‘);
    p->push(‘e‘);
    p->push(‘l‘);
    p->push(‘i‘);
    p->push(‘z‘);

    p->stackTraverse();

    char tmp = 0;
    p->pop(tmp);
    cout << endl << "ding is " << tmp << endl;

    p->clearStack();

    cout << p->stackLength() << endl;

    if (p->stackEmpty())
    {
        cout << "stack is empty" << endl;
    }
    if (p->stackFull())
    {
        cout << "stack is full" << endl;
    }
    delete p;
    p = nullptr;
    return 0;
}

实际应用

时间: 2024-08-10 21:28:48

栈 - 数据结构C++实现的相关文章

java 16 - 5 LinkedList模拟栈数据结构的集合

请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. 1 package cn_LinkedList; 2 3 import java.util.LinkedList; 4 5 6 7 8 public class MyStack { 9 10 //定义一个LinkedList类的成员变量 11 private LinkedList list = null; 12 13 /** 14 * 构造方法 15

采用LinkedList来模拟栈数据结构的集合--先进后出

三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { public LinkedList linkedList;            public MyCollection_LinkedList() {             //在构造方法里初始化             linkedList= new LinkedList();             }

Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)

1. 请用LinkedList模拟栈数据结构的集合,并测试:  题目的意思是:     你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟,使用LinkedList功能方法封装成自己的方法. 2. 代码解析: (1)定义自己集合类MyStack,模拟栈数据结构( 先进后出 ) 1 package cn.itcast_05; 2 3 import java.util.LinkedList; 4 5 /** 6 * 自定义的栈集合 7 * 8 * @author Mr He 9

采用栈数据结构的二叉树遍历

[前言]树的遍历,根据访问自身和其子节点之间的顺序关系,分为前序,后序遍历.对于二叉树,每个节点至多有两个子节点(特别的称为左,右子节点),又有中序遍历.由于树自身具有的递归性,这些遍历函数使用递归函数很容易实现,代码也非常简洁.借助于数据结构中的栈,可以把树遍历的递归函数改写为非递归函数. 在这里我思考的问题是,很显然,循环可以改写为递归函数.递归函数是否借助栈这种数据结构改写为循环呢.因为函数调用中,call procedure stack 中存储了流程的 context,调用和返回相当于根

深入理解Java 栈数据结构

栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 从上图是基于数组实现的栈,可以看到,对栈的操作(压栈.出栈)其实都是对栈顶元素的操作,因此压栈和出栈的速度都比较快.栈中元素按照FILO顺序排序的,即先入后出的规则,先放进去

php数组实现栈数据结构

tips:今天预习四脚猫的php数据结构,看到这个例子,研究了一下,算是对栈结构有个初步了解. 栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_unshift()//头出 用例:验证一个数学算式是否正确,比如{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}. 分析:对于一个算式的正确与否,就是体现在,各种括号的匹配上,括号完全匹

集合框架(用LinkedList模拟栈数据结构的集合并测试案例)

package cn.itcast_05; import java.util.LinkedList; /** * 自定义的栈集合 * * @author 风清扬 * @version V1.0 */ public class MyStack { private LinkedList link;//定义成员变量 public MyStack() { link = new LinkedList(); } public void add(Object obj) { link.addFirst(obj)

C++实现栈数据结构

#ifndef __STACK__ #define __STACK__ class CStack {        int * m_pData;        int m_nCount;        int m_nPos;     public:        CStack(int nLength);        ~CStack();        bool isFull();        bool isEmpty();        void push(const int & value

数据结构Java实现05----栈:顺序栈和链式堆栈

数据结构Java实现05----栈:顺序栈和链式堆栈 一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适