zoukankan      html  css  js  c++  java
  • 数据结构-使用队列实现栈

    1:考点:编程实现下面的stack,并根据stack完成queue的操作

    class MyStack

    {

        void push(data);

        void pop(&data);

        bool isEmpty();

    }

    代码如下:

    #include "stdafx.h"
    #include<malloc.h>
    #include <iostream>
    #include <assert.h>
    using namespace std;
    /*单链表的节点,data表示节点的数据域,next指向下一个节点*/
    class MyData
    {
    public: 
        MyData() :data(0), next(NULL) {};//默认构造函数,这样表示后,主体中不用再写这个函数了
        MyData(int value) :data(value), next(NULL) {};//带参数的构造函数
        int data;//数据域
        MyData *next;//下一个节点
    };
    
    /*表示栈的定义,其中public成员top表示栈顶,由于不能直接操作栈底,因此这里没有定义栈底的指针。
    在默认构造函数中,把栈顶指针top置空,表示此时栈为空栈。*/
    class MyStack
    {
    public:
        MyStack() :top(NULL) {};//默认构造函数
        void push(MyData data);//进栈
        void pop(MyData *pData);//出栈
        bool IsEmpty();//是否为空栈
        MyData *top;//栈顶
    };
    
    
    //进栈
    void MyStack::push(MyData data)
    {
        MyData *pData = NULL;
        pData = new MyData(data.data);//生成新节点
        pData->next = top;
        top = pData;
        /*---测试---*/
        //cout << "栈顶地址:" << top << endl;
        //cout << "栈顶地址中的内容:" << top->data << endl;
        /*---*/
    }
    
    //判断栈是否为空
    bool MyStack::IsEmpty()
    {
        return(top == NULL);//如果top为空,则返回1,否则返回0
    }
    
    //出栈
    void MyStack::pop(MyData *data)//将删除的节点保存到data中
    {
        if (IsEmpty())//如果栈为空,直接返回
        {
            return;
        }
        data->data = top->data;//给传出的参数赋值
        MyData *p = top;//临时保存原栈顶节点
        top = top->next;//移动栈顶,指向下一个节点
        delete p;//释放原栈顶节点内存
    }
    
    int main()
    {
        MyData data(0);//定义一个节点,使用带参数的构造函数
        MyStack s;//定义一个栈结构
        s.push(MyData(1));
        s.push(MyData(2));
        s.push(MyData(3));
        s.pop(&data);//第一次出栈,并且将删除的节点的数据保存到data参数中
        cout << "pop" << data.data << endl;
        s.pop(&data);//第二次出栈,并且将删除的节点的数据保存到data参数中
        cout << "pop" << data.data << endl;
        s.pop(&data);//第三次出栈,并且将删除的节点的数据保存到data参数中
        cout << "pop" << data.data << endl;
        cout << "Empty=" << s.IsEmpty() << endl;//打印判空
        return 0;
    }
    View Code

    运行结果:

  • 相关阅读:
    SQL Server 2008中的hierarchyid
    SQL判断空值、nvl处理与JOIN的使用
    Transact-SQL语法速查手册
    MySQL连接字符串
    如何让spark sql写mysql的时候支持update操作
    基于calcite做傻瓜式的sql优化(三)
    基于calcite做傻瓜式的sql优化(二)
    基于calcite做傻瓜式的sql优化(一)
    spark升级:从1.6升级到2.4.6的记录
    彻底解决,sparkSQL读取csv中Map字段类型的问题
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7607117.html
Copyright © 2011-2022 走看看