STL stack练习

C++STL之stack栈容器 - 数据结构教程 - C语言网C++STL之stack栈容器1.再谈栈回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以以更为简单的方式实现。2.头文件头文件#incl……icon-default.png?t=N7T8https://www.dotcpp.com/course/113

输入一个10进制正整数,输出它所对应的八进制数。

//十进制转八进制
//可以用栈来存储取模结果(先入后出)

#include<iostream>
#include<stack>
using namespace std;

void DEC2OCT(const int& DEC, stack<int>& OCT){
    int dec = DEC;
    while(dec){
        OCT.push(dec%8);
        dec = dec / 8;
    }
}

// stack属于特殊的数据结构,没有迭代器
// 只能通过不断pop->访问top,实现数据读取
void show_stack(stack<int>& mystack){
    stack<int> tmp(mystack);//拷贝构造 深拷贝
    while(!tmp.empty()){
        cout<<tmp.top();
        tmp.pop();
    }
    cout<<endl;
}

int main()
{
    int dec;
    stack<int> res;
    while(cin){
        cin>>dec;
    }
    DEC2OCT(dec, res);
    show_stack(res);
    
    return 0;
}

将十进制整数转换成二进制数

//十进制转二进制
//可以用栈来存储取模结果(先入后出)

#include<iostream>
#include<stack>
#include<vector>
using namespace std;

void DEC2BIN(const int& DEC, stack<int>& BIN){
    int dec = DEC;
    //判断dec是否为负数
    bool flag=0;
    if(dec<0){
        flag = 1;
        dec = -dec;
    }
    //判断dec是否为0
    if(!dec){
        BIN.push(dec);
    }
    
    while(dec){
        BIN.push(dec%2);
        dec = dec / 2;
    }
    
    //加负号
    if(flag){
        int val = BIN.top();
        BIN.pop();
        BIN.push(-val);
    }
}

void show_stack(stack<int>& mystack){
    while(!mystack.empty()){
        cout<<mystack.top();
        mystack.pop();
    }
    cout<<endl;
}

int main()
{
    int dec;
    vector<int> input;
    stack<int> res;
    
    while(cin>>dec){
        input.push_back(dec);
    }
    
    for(auto it=input.begin(); it!=input.end(); it++){
        dec = *it;
        DEC2BIN(dec, res);
        cout<<dec<<"-->";
        show_stack(res);
    }
    
    return 0;
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值