栈的操作及进制转换

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#define ERROR 0
#define Stack_Init_Size 100
#define StackIncerMent 10
#define OK 1
using namespace std;
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}SqStack;
typedef int Status;
//构造一个空栈
Status InitStack(SqStack &s){
    s.base=(int *)malloc(Stack_Init_Size*sizeof(int));
    if(!s.base) return ERROR;
    s.top=s.base;
    s.stacksize=Stack_Init_Size;
    return OK;
}
//销毁栈
Status DestroyStack(SqStack &s){
    s.top=NULL;
    s.stacksize=0;
    free(s.base);
    return OK;
}
//把栈设置为空
Status ClearStack(SqStack &s){
    s.base=NULL;
    return OK;
}
//判断栈是否为空
bool StackEmpty(SqStack s){
    if (s.top==s.base)
        return 1;
    else return 0;
}
//返回栈的长度
Status StackLength(SqStack s){
    if(s.base==s.top) return ERROR;
    return s.stacksize;
}
//得到栈顶元素
Status GetTop(SqStack s,int &e){
    if(s.base==s.top) return ERROR;
    e=*--s.top;
    return OK;
}
//插入元素e为新的栈顶元素
Status push(SqStack &s,int e){
    if((s.top-s.base)>=s.stacksize){   //如果栈满
        s.base=(int *)realloc(s.base,(s.stacksize+StackIncerMent)*sizeof(int));
        if(!s.base) return(ERROR);
        s.top=s.base+s.stacksize;
        s.stacksize+=StackIncerMent;
    }
    //top栈顶元素的上一个区域
    *s.top++=e;
    return OK;
}
//删除栈顶元素
Status pop(SqStack &s,int &e){
    if(s.base==s.top) return ERROR;
    e=*--s.top;
    return OK;
}

int main(){
    int n,l;
    SqStack s;
    InitStack(s);
    cin>>n;
    while(n){
        push(s,n%8);
        n/=8;
    }
    while(!StackEmpty(s)){
        pop(s,l);
        cout<<l;
    }
    system("pause");
    return 0;

}

时间: 2024-10-21 05:32:51

栈的操作及进制转换的相关文章

java中Integer包装类的详细讲解(java二进制操作,所有进制转换)

程序员都很懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往需要操作Integer,或者各种进制的转换等等.我今天就为大家详细讲解一下Integer的使用吧.看代码: package com.herman.test; public class IntegerTest { public static void main(String[] args) { System.out.println("Integer中的常量***************************

java中Integer包装类的具体解说(java二进制操作,全部进制转换)

程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: package com.herman.test; public class IntegerTest { public static void main(String[] args) { System.out.println("Integer中的常量**************************

java:数据结构(二)栈的应用(进制转换)

说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article/details/80438113 如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化: 掌握这两个方法就可以实现任意进制的随便转化 (这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧) 再看一个水题: 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字

11 栈的使用例子 进制转换

十进制转换为八进制: 算法:除八取余法,然后按倒序将余数串起来就是对应的八进制数. 利用栈后进先出的特点,获取余数序列的倒序输出,即可得到八进制数. 括号匹配的检验: 表达式求值: 算符优先算法 原文地址:https://www.cnblogs.com/CPU-Easy/p/11712852.html

c语言之进制转换(栈实现)

从上两篇博客中我们可以知道,栈具有后进先出的特性,而进制转换的打印输出刚好与计算过程相反,满足栈这后进先出的特性, 所以可以用栈很快的实现进制转换,下面是用栈实现进制转换的c函数 void conversion (SqStack *pstack,unsigned int N, const unsigned int d){ if( pstack == NULL)//当传入参数为指针,必须判空 exit(-1); int mod ;//保存mod = N %d while( N != 0){ mod

利用栈实现进制转换

#include<stdio.h>#include<malloc.h> #define MAX_STACK_SIZE 10//静态栈向量大小 #define ERROR 0#define OK 1 typedef int ElemType;typedef int Status;/栈的应用:进制转换/typedef struct sqstack{ElemType stack_array[MAX_STACK_SIZE];// int size;int top;int bottom;}S

用栈实现进制转换

“除基取余 + 顺序栈”  实现十进制数转换成其他进制数,代码如下: #include <stdio.h>#define MAX_L 100 //定义栈typedef struct {    int data[MAX_L];            int top;            }Stack; //进制转换//origin是待转数,right是要转的目的数的权void Convert(int origin, int right)  {    Stack s;        //初始化栈

数据结构实验之栈:进制转换

            数据结构实验之栈:进制转换 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数:第二行输入R. 输出 输出转换所得的R进制数. 模板: while(n!=0) { mod = n%r; q[i++] = mod;//i初始化为0 n/=r; }  

Java的进制转换操作(十进制、十六进制、二进制)

2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. 1.十进制 转 十六进制: 2.十进制 转 二进制 3.十六进制 转 十进制: 4.十六进制 转 二进制: 5.二进制转 十进制: 6.二进制转十六进制: Java的进制转换操作(十进制.十六进制.二进制),布布扣,bubuko.com