顺序栈--代码题

news/发布时间2024/5/21 7:25:42

数据结构

顺序栈代码题

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.ulsteruni.cn/article/23674235.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

嵌入式笔记4.1 GPIO 功能复用

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

图文结合手把手教你创建SpringCloud项目

前言 什么是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务注册、服务发现、网关、路由、链路追踪等。Spring Cloud 并不是重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了…

关于双向循环列表的插入、删除、遍历

目录 双向循环链表公式初始化双向循环链表 构建双向循环链表结构体 // 双向循环链表节点定义 typedef struct double_loop_node { char data[DATA_LEN]; // 数据域,存储数据长度 struct double_loop_node *next; …

博客园主题美化

博客园主题美化 参考链接 https://www.cnblogs.com/zlzgzlz/p/17656741.html

Redis 面试知识点

1、Redis缓存数据库一致性采用最终一致性,而不是采用强一致性,强一致性会导致系统吞吐量变差;采用双删除的策略,第二次删除,采用延迟删除;推荐采用,先操作数据库,直接删除缓存的方式;删除失败的情况,采用异步方式,重试操作;读取binlog异步删除,使用开源框架canal,…

日志服务 HarmonyOS NEXT 日志采集最佳实践

背景信息 随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。 HarmonyOS 不…