顺序栈--代码题

news/2024/5/19 9:19:54

数据结构

顺序栈代码题

image

·设计一个进制转换程序,使用顺序栈设计一个把十进制转化为十六进制的接口,实现当键盘输入一个非负的十进制时,可以在终端输出对应的十六进制数。

/*****************************************************************************************  file name:  2024-04-25_SeqStackdemo.c*  author   :  Tongyaqi1110@163.com*  date     :  2024/04/25*  function :  设计一个算法,在顺序栈中将十进制数转换为十六进制数的接口*  note     :  None**  CopyRight (c)   2024    Tongyaqi1110@163.com   All Right Reserved*************************************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>/****************************************************************************** function name     : Dec_trans_Hex* function          : 顺序栈中将十进制数转换为十六进制数的接口* parameter         : @data** Return results    : None* note              : None* author            : tongyaqi1110@163.com* date              : 2024-04-25* version           : V1.0* revision history  : None*****************************************************************************/
// 1.我们得先判断用户输入的十进制数是否和规定
// 2.对输入的十进制进行取余操作,将余数压入栈中
// 3.对十进制数取商处理,压入栈中
// 4.依次出栈即为所得十六进制void Dec_trans_Hex(int data)
{SeqStack_t *Manager = SeqStack_Create(8); // 对数据栈容量进行初始化定义while (data){Manager->Bottom[++Manager->Top] = data % 16; // 对输入的十进制进行取余操作,将余数压入栈中data = data / 16;                            // 对十进制数取商处理,商为0即退出(十进制转十六进制的用法)if (data / 16){break;}}SeqStack_Print(Manager); // 遍历此时栈中的值SeqStack_Pop(Manager);   // 依次出栈
}
int main()
{int num;printf("Input a decimal number:");scanf("%d", &num);Dec_trans_Hex(num);
}

·题目中用上的顺序栈的其他函数


//指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改
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(Manager));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;		//由于顺序栈为空,则栈顶元素的下标初值为-1return 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;
}//出栈
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{DataType_t temp = 0;  //用于存储出栈元素的值//1.判断顺序栈是否为空if ( SeqStack_IsEmpty(Manager) ){printf("SeqStack is Empty!\n");return;}//2.由于删除了一个元素,则需要让顺序栈的栈顶元素下标-1temp = Manager->Bottom[Manager->Top--];return temp;
}//遍历顺序表的元素
void SeqStack_Print(SeqStack_t *Manager)
{for (int i = 0; i <= Manager->Top; ++i){printf(" Stack Element[%d] = %d\n",i,Manager->Bottom[i]);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/24976.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

aws安装jenkins步骤

一、aws安装jdk11 1.1 aws安装jdk11 1、切换root,更新yum, sudo su yum update exist 2、安装JDK1.8版本 yum -y list java-1.8.0* #(安装jdk11,yum -y list java-11*) yum install java-1.8.0-openjdk-devel.x86_64 #(安装jdk11,yum -y list java-11-openjdk-deve…

mysql基础

mysql通用语法:SQL分类SHOW CREATE DATABASE test; MySQL会返回一个结果集,其中包含创建test数据库时使用的SQL语句。在这个语句中,你可以找到字符集的定义,通常类似于CHARACTER SET utf8mb4。

嵌入式笔记4.1 GPIO 功能复用

目录一、了解 MCU(GPIO)具有的所有复用功能通过查看 MCU 的数据手册可以知道 MCU 的所有引脚的功能:例 STM32L431:例 stm32f103:复用、重映射、多路复用(多功能引脚)GPIO复用(AF - Alternate Function)重映射(Remapping)多路复用(Multi-function)常见引脚功能一览…

ps/lr如何为一个型号相机的raw使用其他相机的预设

首先单独下载camera raw,进到C:\ProgramData\Adobe\CameraRaw\CameraProfiles\Camera中获取想要的相机型号的预设dcp文件 去 https://liquidtelecom.dl.sourceforge.net/project/dcptool/dcptool/dcpTool V1.11.0/dcpTool_1_11_0.zip?viasf=1 下载dcp编译工具dcpTool cd C:\U…

记录收集博客园美化代码

记录了一些好看实用的博客园美化主题🌃 初始微改版预览页面点击查看代码 /* 全局字体设定 */ #cnblogs_post_body {font-family: Roboto, sans-serif;color: #333; /* 增强字体颜色对比度,提高可读性 */ }/* 一级标题 */ #cnblogs_post_body h1 {font-size: 30px;font-weigh…

spring-boot学习记录

💭 记录spring-boot学习过程🕐 学习参考网站 1天搞定SpringBoot+Vue全栈开发-bilibili🕐 准备 🕑 项目热部署 视频中的idea版本较老,热部署实现参考IDEA2021 热部署-知乎 🕑 修改默认端口 在 src/main/resources/application.properties 文件中添加 server.port=80�…

一文搞懂“对账系统”

对于每天都需要对账的生意来讲,如果遇上大的额数,就会出现困难,为了提升核对效率以及准确性,对账系统有一定的改变是避免不了的,下面是笔者整理的关于“对账系统”的内容分享,想要了解相关内容的可以接着继续往下了解了解哦!账目核算是财务工作的必要部分,随着线上交易…

UE4纯C++实现游戏快捷栏之将快捷栏注册到玩家状态

我们有了UI有了物品信息,接下来我们便需要给每一个玩家绑定一个快捷栏了,我们分以下几部分来实现我们玩家的快捷栏。1.Types.h struct ShortcutContainer:我们定义快捷栏的单个容器结构体,其内部存储玩家所引用的快捷栏的单个格子的信息数据基础的,我们将在结构体中保存{单…