首页 > 其他分享 >循序栈练习题:十进制转为十六进制

循序栈练习题:十进制转为十六进制

时间:2024-04-25 20:33:48浏览次数:22  
标签:练习题 十六进制 SeqStack int Manager 循序 dec 十进制 顺序

数据结构练习题:进制转换

将十进制转换为十六进制

/********************************************************************************************************
 * @file name:	DEXchangetoHEX.c
  * @brief  实现十进制转换为十六进制
  * @author 15070884254@163.com
  * @date 2024/04/25
  * @version 1.0 :在下坂本,有何贵干 
  * @property :none
  * @note   none
  * CopyRight (c)  2023-2024  15070884254@163.com   All Right Reseverd******************************************************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改
typedef int DataType_t;

// 构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
typedef struct SequenceStack
{
  DataType_t *Bottom; // 记录栈底地址
  unsigned int Size;  // 记录栈容量
  int Top;            // 记录栈顶元素的下标

} SeqStack_t;

// 创建顺序表并对顺序栈进行初始化
SeqStack_t *SeqStack_Create(unsigned int size)
{
  // 1.利用calloc为顺序栈的管理结构体申请一块堆内存
  SeqStack_t *Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t));

  if (NULL == Manager)
  {
    perror("calloc memory for manager is failed");
    exit(-1); // 程序异常终止
  }

  // 2.利用calloc为所有元素申请堆内存
  Manager->Bottom = (DataType_t *)calloc(size, sizeof(DataType_t));

  if (NULL == Manager->Bottom)
  {
    perror("calloc memory for Stack is failed");
    free(Manager);
    exit(-1); // 程序异常终止
  }

  // 3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)
  Manager->Size = size; // 对顺序栈中的容量进行初始化
  Manager->Top = -1;    // 由于顺序栈为空,则栈顶元素的下标初值为-1

  return Manager;
}

// 判断顺序栈是否已满
bool SeqStack_IsFull(SeqStack_t *Manager)
{
  return (Manager->Top + 1 == Manager->Size) ? true : false;
}

// 入栈
bool SeqStack_Push(SeqStack_t *Manager, DataType_t Data)
{
  // 1.判断顺序栈是否已满
  if (SeqStack_IsFull(Manager))
  {
    printf("SeqStack Full is Full!\n");
    return false;
  }

  // 2.如果顺序栈有空闲空间,则把新元素添加到顺序栈的栈顶
  Manager->Bottom[++Manager->Top] = Data;

  return true;
}

// 判断顺序栈是否为空
bool SeqStack_IsEmpty(SeqStack_t *Manager)
{
  return (-1 == Manager->Top) ? true : false;
}

/*************************************************
/**
 * @function name:	Stack_change_Print
  * @brief  打印顺序栈所存放的数据
  * @param  Manager:顺序栈
  * @retval 函数返回类型空
  * @date 2024/04/25
  * @version 1.0 :在下坂本,有何贵干 
  * @note   none
  * CopyRight (c)  2023-2024  15070884254@163.com   All Right Reseverd
 *
 **************************************************/
void Stack_change_Print(SeqStack_t *Manager)
{
  printf("new changed Hexnum is 0x");
  for (int i = Manager->Top; i >= 0; --i)  //从顶向底打印
  {
    printf("%x", Manager->Bottom[i]);
  }
  return;
}


/*************************************************
/**
 * @function name:	Stack_change_Print
  * @brief  对十进制数转换成十六进制
  * @param  dec:输入的十进制数
  * @retval 函数返回类型空
  * @date 2024/04/25
  * @version 1.0 :在下坂本,有何贵干 
  * @note   none
  * CopyRight (c)  2023-2024  15070884254@163.com   All Right Reseverd
 *
 **************************************************/
void DecToHex(unsigned int dec)
{

  SeqStack_t *stack_change = SeqStack_Create(100);
  if (dec == 0)   	//判断十进制为0的情况 
  {
    SeqStack_Push(stack_change, dec);
  }

  while (dec != 0) // 十进制不为0的情况
  {
	//对十进制数不断除16取余得出不同位数
    int lastnum = dec % 16;
    SeqStack_Push(stack_change, lastnum); 
    dec /= 16; 	
  }
  Stack_change_Print(stack_change);//打印循序栈里的值
  return;
}
//验证可行性
int main(int argc, char const *argv[])
{
  int dec;
  printf("请输入一个十进制:");
  scanf("%d", &dec);
  DecToHex(dec);
  return 0;
}

标签:练习题,十六进制,SeqStack,int,Manager,循序,dec,十进制,顺序
From: https://www.cnblogs.com/luo-tt/p/18158508

相关文章

  • 十进制转十六进制
    设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。思路:进栈->用循环将十进制数对16取模,将结果存进栈中,然后定义无符号整型变量,将该十进制数除以16得到的结果(int类型自动取整,舍弃小......
  • leedcode-数字转换为十六进制数
    自己写的,先整数转二进制,再切片二进制转16进制classSolution:deftoHex(self,num:int)->str:#处理特殊情况:当num为0时,直接返回'0'ifnum==0:return'0'#定义十六进制字母的映射关系my_dict={10:......
  • 顺序表和链表的练习题
    顺序表题目一:题目分析:该题目需要先对顺序表进行遍历至元素x正确插入位置,再对顺序表完成插入操作。因此涉及到for循环与if语句的使用代码实现/********************************************************************** name : SequenceList_insert* function:实现插......
  • 34.c语言数组练习题(牛客网)
    先打个广告哈哈哈牛客网练编程题不错不错哦冒泡排序必须必须必须会#include<stdio.h>voidsort(intarr[],intn){//外层循环for(inti=0;i<n-1;++i){intflag=1;//假设flag=1就是已经排序好的//内层循环for(intj=0;......
  • rhce练习题容易错的地方
    rhce练习题里容易错的地方使用导航器的时候,ssh连接因为导航器是一个工具,生成一个容器,在容器里面运行playbook安装软件包的时候,多个软件包使用循环looploop的格式-hosts:NODE1tasks:-name:installphpansible.builtin.yum:name:"{{ite......
  • 十六进制字符串每隔32个字母换行显示
     //每32个字节换行打印publicstaticvoidformatPrint(StringhexStr){intno=0;intlength=hexStr.length();for(inti=0;i<length;i++){if((i+1)%32==0){Strings=twoSpaceTwo(hexStr.substring(i-31,i+1));System.out.println(......
  • 结对编程 c++语言实现四则运算练习题
    结对同学:2252813程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间通过阅读题目要求,我们决定使用c++语言完成编程,需要满足两个功能,首先生成一个包含两个运算符的算式,参与运算的数字在100之内。下一步检查答案是否正确,并且保证答......
  • 【练习题】财富排行榜
    题目描述很多信息学选手,在很多领域做出了非常大的贡献,为国家科技的发展出了很多力,有不少还是开领了科技的先河。叶老师这边带过竞赛的学生也有不少考上了清华北大,他们将会继续深造,以便发挥出自己的才能。在这些选手实现为科技进步贡献的同时,他们也实现了自我价值。比如:清华大学......
  • 27.C语言顺序循环结构结构练习题整理
    参考:https://www.qingsuyun.com/lib/d/600120380038000300010041/6、【单选题】语句while(!e);中的条件!e等价于()。[2分] ***AA、e==0B、e!=1C、e!=0D、~e9、【单选题】以下叙述正确的是()。[2分] ****BA、continue语句的作用是结束整个循环的执行......
  • 【Azure Power BI】在Power BI中获取十进制随机数后,转换十六进制作为颜色值示例
    问题描述在使用PowerBIDesktop做报表,用到了其中一个图标组件(CardBrowser),可以做出比较漂亮的图片和带颜色的卡片效果:但是,在自己的数据源中,并没有颜色值。所以颜色值为0-255的十进制转换为00-FF的十六进制数据,想到了生成随机数,然后转换为颜色值。数据源格式示例:Title Coun......