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

    运行结果:

  • 相关阅读:
    Python基础练习
    理解信息管理系统
    datatime处理日期和时间
    中文词频统计
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    条件、循环、函数定义 练习
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7607117.html
Copyright © 2011-2022 走看看