精华内容
下载资源
问答
  • C语言数据结构中数制转换实例代码数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以便...

    C语言数据结构中数制转换实例代码

    数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以便初学者调试和运行,并从中有所收获。

    #include

    #include

    #include

    #define STACK_INIT_SIZE 10 //定义最初申请的内存的大小

    #define STACK_INCREMENT 2 //每一次申请内存不足的时候扩展的大小

    #define OVERFLOW 0

    #define FALSE 0

    #define TRUE 1

    #define ERROR 0

    #define INFEASIBLE 0

    #define OK 1

    typedef int SElemType;

    typedef int Status;

    int Length;

    typedef struct SqStack{

    int stacksize;

    SElemType *top;

    SElemType *base;

    }SqStack;

    Status InitStack(SqStack &S){

    if(!(S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof( SElemType))))

    exit(-1);

    S.top = S.base;

    S.stacksize = STACK_INIT_SIZE;

    return OK;

    }

    Status Push(SqStack &S , SElemType e){

    if(S.top - S.base >= S.stacksize)

    {

    S.base = (SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT) * sizeof( SElemType));

    if(!S.base)

    exit(OVERFLOW);

    S.top = S.base + S.stacksize;

    S.stacksize += STACK_INCREMENT;

    }

    *S.top++ = e;

    return OK;

    }

    void OutList(SqStack S ){

    S.top = S.base;

    for(int i = 0; i

    printf("%d\t",*(S.top)++);

    }

    printf("\n"); // 输出后换行

    }

    Status StackEmpty(SqStack S) {

    if(S.top == S.base)

    {

    return TRUE;

    }else{

    return FALSE;

    }

    }

    Status Pop(SqStack &S,SElemType &e)

    {

    if(S.top ==S.base)

    return ERROR;

    e = * --S.top;

    return OK;

    }

    void conversion() // 算法3.1

    {

    SqStack s; //顺序栈s

    unsigned n, m; // 非负整数

    SElemType e; //栈元素e

    InitStack(s); // 构造空栈s

    printf("请输入十进制数n(>=0) = ");

    scanf("%u", &n); // 输入非负十进制整数n

    printf("\n请输入需要转换到的进制: ");

    scanf("%u", &m); // 输入非负十进制整数n

    printf("十进制数%u的八进制数是", n);

    while (n) // 只要n不等于0就循环

    //从n为用户输入的十进制数开始,一直到n等于0为止

    {

    Push(s, n % m); // n除以8的余数(8进制的低位)入栈

    //把n除以8的余数压入栈s

    //先压入的余数是八进制的低位,后压入的余数是八进制的高位

    n = n / m; //令n等于n整除以8的商,进入下轮循环

    }

    //循环结束时,n等于0

    while (!StackEmpty(s)) // 只要栈s没弹空就不断循环,

    //直到弹出栈底元素栈s为空为止

    {

    Pop(s, e); // 弹出栈顶元素且赋值给e

    //依次弹出栈s的栈顶元素交给e带回

    //先弹出的是八进制的高位,后弹出的是八进制的低位

    printf("%d", e); // 依次输出e

    }

    //循环结束时,栈s为空

    printf("\n");

    }

    int main(){

    /********************** 函数声明区 **********************/

    Status InitStack(SqStack &S);

    Status Push(SqStack &S, SElemType e);

    void OutList(SqStack S);

    /********************** 函数执行区 **********************/

    conversion();

    return 0;

    }

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • 符合进制转换的方式,故用栈这种结构。 一.定义声明 #include<iostream> using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; //定义结构体: typedef struct ...

    为什么要用栈这种结构

    在这里插入图片描述

    在十进制转换为其他进制时,先算的余数由下而上组成的数是最终转换结果,见上图。而栈这种结构中,元素先进后出。符合进制转换的方式,故用栈这种结构。

    一.定义声明

    #include<iostream> 
    using namespace std;
    #define OK 1
    #define ERROR 0
    typedef int Status;
    typedef int ElemType;
    //定义结构体:
    typedef struct Node
    {
    ElemType data;
    struct Node   * next;
    }StackNode ,* LinkStack ;
    //函数的声明:
    Status InitStack ( LinkStack   &s );
    Status   Push ( LinkStack   &s , ElemType  e );
    Status   Pop ( LinkStack   &s , ElemType  &e );
    bool   StackEmpty ( LinkStack   s );
    void Conversion(int x,  int r);//x:转换数,r:进制
    

    二.主函数

    int main()
    {int x,r,T;
      while(1)
     {
      cout<<"输入转换数和进制:";
      cin>>x>>r;
      if(x==0||r==0)//如果x==0或者r==0退出循环
      {
        break;
      }
      else
      {
      Conversion( x,   r);
      printf("\n");
      }
     }
    }
    

    三.函数部分

    Status InitStack ( LinkStack   &s )
    {
      s=new StackNode;
      if(!s) return ERROR;
      s->next==NULL;
      return OK;
    }
    //入栈
    Status   Push ( LinkStack   &s , ElemType  e )
    {
      StackNode *p=new StackNode;
      p->data=e;
      p->next=s->next;
      s->next=p;
      return OK;
    }
    //出栈
    Status   Pop ( LinkStack   &s , ElemType  &e )
    {
      StackNode *p;
      if(s->next==NULL) return ERROR;
      p=s->next;
      e=p->data;
      s->next=p->next;
      delete p;
      return OK;
    }
    bool   StackEmpty ( LinkStack   s )
    {         
    	return  (s->next==NULL);
     }
    
    void Conversion(int x,  int r)   //x:转换数,r:进制      
    {  
        LinkStack s;      ElemType  e;         
        InitStack(s); 
        while  ( x )               
        {    
    	 Push ( s, x % r ) ;  
    	 x=x / r ;   
        }      
        while ( ! StackEmpty(s) )    
        {    
              Pop(s,e);          
              cout<<e;      
        }                                    
    }
    

    四.说明

    while  ( x )               
        {    
    	 Push ( s, x % r ) ;  
    	 x=x / r ;   
        }      
    

    关于对上述代码的解释:
    x%r的值(值为x➗r的余数)入栈
    十进制转二进制
    以202为例。202对先2进行除法运算得出的余数记录在右侧比如:202/2=101余0,用101继续进行除2运算101/2=50余…最后结果从下到上读取:11001010。
    在这里插入图片描述

    展开全文
  • #include<stdio.h> #define maxsize 100 typedef int elemtype; typedef struct { elemtype data[maxsize]; int top; }seqstack; void initstack(seqstackq) { q->top=-1; } int push(seqstackq,elemtype ...}

    #include<stdio.h>
    #define maxsize 100
    typedef int elemtype;
    typedef struct
    {
    elemtype data[maxsize];
    int top;
    }seqstack;
    void initstack(seqstackq)
    {
    q->top=-1;
    }
    int push(seqstack
    q,elemtype x)
    {
    if(q->topmaxsize-1)
    {
    printf(“栈满\n”);
    return 0;
    }
    else
    {
    q->top++;
    q->data[q->top]=x;
    return 1;
    }
    }
    int pop(seqstackq,elemtypex)
    {
    if(q->top
    -1)
    return 0;
    else
    {
    x=q->data[q->top];
    q->top–;
    return 1;
    }
    }
    int isempty(seqstack
    q)
    {
    if(q->top==-1)
    return 1;
    else
    return 0;
    }
    int main()
    {
    seqstack q;
    int N,x;
    initstack(&q);
    scanf("%d",&N);
    while(N<=0)
    {
    printf(“error!”);
    scanf("%d",&N);
    }
    while(N)
    {
    push(&q, N%8);//push(SeqStack *s,Elemtype x)
    N=N/8;
    }
    while(!isempty(&q))//isEmpty(SeqStack *s)
    {
    pop(&q, &x);//pop(SeqStack *s,Elemtype *x)
    printf("%d",x);
    }
    }

    展开全文
  • 数据结构c语言-顺序栈(实现进制转换) 文章目录数据结构c语言-顺序栈(实现进制转换)前言一、顺序栈数据结构定义二、创建空的顺序栈三、判断栈是否为空四、判断栈满五、入栈六、弹栈七、取栈顶八、销毁顺序栈九、...

    数据结构c语言-顺序栈(实现进制转换)


    前言

    一个菜鸡写出来的顺序栈,写篇文章记录一下
    最后是顺序栈实现任意进制转换的代码


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、顺序栈数据结构定义

    typedef int DataType;
    struct seqStack
    {//有3个数据成员
      int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM   
      int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可  整型  curNum
      DataType *element;//用于存放顺序栈数据元素的连续空间的起始地址  
    };
    

    二、创建空的顺序栈

    代码如下(示例):

    typedef struct seqStack *PseqStack;
    PseqStack createNullStack_seq(int m)
    {//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
     //若m=0,则返回NULL 
     if (m==0)return NULL;
      struct seqStack* slist = (struct seqStack*)malloc(sizeof(struct seqStack));
      if(slist!=NULL){
        slist -> element = (DataType *) malloc(sizeof(DataType)*m);
        if(slist -> element)
        {
          slist -> MAXNUM = m;
          slist -> top = 0;
          return slist;
        }
      }
      return NULL;
    } 
    

    三、判断栈是否为空

    int isNullStack_seq(PseqStack L)
    {
      //判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
      if(L==NULL) 
      {
        return -1;
      }else 
      if(L->top==0)
     {
       return 1;
     }else{
       return 0;
     }
    }
    

    四、判断栈满

    int isFullStack_seq(PseqStack L)
    {
      //判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
    if(L->top==L->MAXNUM)
    {
      return 1;
    }else{
      return 0;
    }
    }
    

    五、入栈

    int push_seq(PseqStack L ,DataType x)
    {//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
        if(isFullStack_seq(L)||L==NULL)
        {
          return 0;
        }else{
          L->element[L->top]=x;
           L->top=L->top+1; 
          return 1;
        }
    }
    

    六、弹栈

    DataType pop_seq(PseqStack L)
    {//弹栈并返回删除元素,若栈为空,则返回-1
     int p;
        if(L->top == 0)
        {
          return -1;
        }else{
          p=L->element[L->top-1];
          L->top=L->top-1;
          return p;
        }
    }
    

    七、取栈顶

    DataType top_seq(PseqStack L)
    {// 取栈顶元素返回,若栈为空,则返回-1
        if(L->top ==0)
        {
          return -1;
        }else{
          return L->element[L->top];
        }
    }
    

    八、销毁顺序栈

    int destroystack_seq(PseqStack L)
    {
        //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
        int m;
        if(L == NULL)
        {
          return 0;
        }else{
          m=L->top;
          free(L->element);
          L->element=NULL;
          L->top=NULL;
          L->MAXNUM=0;
          return m;
        }
    }
    
    

    九、实现数值转换

    //使用已实现的栈操作,实现数制转换
    void print(PseqStack L)
    {
    //逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号
    int x; 
    for(int i=0;i < L->MAXNUM;i++)
    {
      x=pop_seq(L);
      printf("%d",x);
    }
    }
    void convert(int data,int k)  
        {  
          struct seqStack* slist=createNullStack_seq(9);//调用创建函数
          int i,x; 
          char a; 
          while(data>0)   //开始进制转换
          {
            push_seq(slist,data%k); 
        	  data/=k;
          }
          while(slist->top!=0)
          {
            x=pop_seq(slist);
            if(x!=-1)
            {
              if(x>9) printf("%c",x+55);//实现大于9的数字转换为大写字母
           else
                printf("%d",x);
          }
        }  
        }
    

    调用创建空顺序栈函数时,用的参数是最大可容纳的数量,但是不太确定,由此取了9的空间
    在创建空栈时要给element分配空间

    展开全文
  • 数据结构 study 6: 栈 实现 十进制 转换为 8进制
  • 先上结果图: 代码部分
  • Java 进制转换

    千次阅读 2021-02-12 09:06:16
    Java进制转换主要分为2大类一、十进制转换成其他进制1、十进制转二进制Integer.toBinaryString(int i)例子:inta = 100; System.out.println(Integer.toBinaryString(a));输出结果:11001002、十进制转八进制Integer...
  • 1.利用栈的数据结构特点,将二进制转换为十进制数分析由于栈具有先进后出的特性,我们输入11001001的二进制数,出栈的顺序就相反,将每个出栈的数带入进制转换公式得到的结果就是转换之后的十进制数完整代码#include...
  • 栈与队列的应用(1)输入一个十进制数,利用栈操作,将该数转换成n进制数。#include #include #include #define stack_init_size 100#define stackincrement 10typedef struct sqstack{int *base;int *top;int stack...
  • 下面是我的代码,在C 上的报错很无语。。。高手解释下#include#include#define STACK_INIT_SIZE 100;#define STACKINCREMENT 10;typede下面是我的代码,在C 上的报错很无语。。。高手解释下#include#include#define ...
  • 1:第一步创建一个栈 #include<stdio.h> #include<stdlib.h> //malloc,realloc函数 ... //将代码中所有Elemtype改为char //定义栈 typedef struct { Elemtype *top; Elemt
  • 进制转换使用的方法是短除法 短除法图示: 原理: 图中9是待转换数,将9与2相除,得到的余数依次入栈,当待转换数9被除为0时,将栈中的余数依次出栈,即得到9的二进制形式:1001 代码示例: #include<stdio...
  • 编写把一个十进制转换为R进制 (如:R=2,则转换为二进制,R=7则转换为7进制)的数制转换算法函数(要求利用栈来实现) 【算法步骤】 ① 初始化一个空栈S。 ② 当十进制数N非零时,循环执行以下操作: l把N...
  • C语言栈实现进制转换

    2021-01-31 19:54:05
    转换代码: /* 进制转换 */ scStack *sysConvert(int num,int system,scStack *sys){ int q = num / system;//商 int r = num % system;//余 scStack *syS = push(sys,r); while(q!=0){ r = q
  • 联系到近期数据结构学的栈与递归,在草稿纸上模拟几遍后,写出了一个简洁的函数用于进制转换代码如下: //因为进制取余结果和输出顺序恰恰相反,故使用栈来保存余数 void f(int n,int k,stack<int> &...
  • /*** 使用栈完成进制转换* @author 杜小唱**/public class TestBaseConversion {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(convert(3927,8));}/** 把一个十...
  • 计算十进制转换为二进制的过程可以当成把每个计算后取余的数字压入栈内的操作 具体实现过程如下 // 十进制转二进制代码 function dec2bin(decNumber){ //定义栈 var stack=new Stack() //将数字压入栈内 while...
  • 前言:上学期的数据结构课设写的,拿了优秀(代价就是爆肝完拉了两天肚子),代码如下,功能十分齐全。其实只要明白进制转换的过程就能写出来,下面代码分别实现了 1.十进制数转换成任意进制数 2.任意进制数转换成十...
  • 一.分析 二进制转换成十进制,就是从低位起用每一位去乘以对应位的积,也就是说用第n位去乘以2 * (n - 1),然后全部加起来
  • 利用栈实现进制转换

    2021-11-02 16:33:59
    栈是一种基本的数据结构,分为顺序栈和链式栈两种。栈的基本特点是先入栈的元素后离栈。在理解这一特点时,我们可以把他当做一个箱子,先放入的东西会到最下面,例如下图:将1、2、3、4依次保存入栈,最后放入栈中的...
  • 进制转换非常简单,尤其是这次只要求了十以内进制的转换,我们只需要先输入要转换的进制t,然后输入要转换的数n,每次求n对进制t取模,压入栈中,最后再一直pop到栈为空即可. 代码如下 void Dataturn(int t,int n) {...
  • 这是比较简单的一个小程序,使用了自定义的链表...下面是程序截图:下面就是程序代码,已经加入了简单的注释信息。希望可以帮到你!----------------------------------binary_convert。c--------------------------...
  • 3.8.十进制转换成二进制在你学习计算机的过程中,你可能已经接触了二进制。二进制在计算机科学中是很重要的,因为存储在计算机内的所有值都是以 0 和 1 存储的。如果没有能力在二进制数和普通字符串之间转换,我们与...
  • 如果无法在通用表示形式和二进制数字之间来回转换,我们将需要以非常奇怪的方式与计算机进行交互。十进制的数字如何转换成二进制的,举几个例子就明白了:图片来自...
  • 题目:利用栈,将十进制数转换成八进制的数。...// 十进制转换成八进制import java.util.*;// 不支持负数public class ConversionTest {public static void main(String[] args) {if (args.length &l...
  • 在VisualStudio调试通过代码:#define_CRT_SECURE_NO_WARNINGS//十进制整数转化为R进制整数算法#include#include#defineMAXSIZE100typedefstruct{intdata[MAXSIZE];inttop;}SeqStack,*PSeqStack;floatX;intR;...
  • printf(“请输入你想转换尾多少进制的数\n”); scanf_s("%d", &r); initstack(&s); while (N) { pushstack(&s, N % r); N = N / r; } while (!empty(&s))//当栈不为空的时候才进行出栈 { popstack(&s, &val); ...
  • 基于链栈的进制转换算法 题目 将十进制数转换为其它进制数并...基本数据结构-链栈的实现 LinkStack.h /* *链栈 */ #include<iostream> using namespace std; struct Node { int val; //值域 Node* under;
  • 4.5.整数转换为任意进制字符串假设你想将一个整数转换为一个二进制和十六进制字符串。例如,将整数 10 转换为十进制字符串表示为 10,或将其字符串表示为二进制 1010。虽然有很多算法来解决这个问题,包括在栈部分...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 241,569
精华内容 96,627
关键字:

数据结构进制转换代码

数据结构 订阅