设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 定义错误码
#define ERROR_STACK_FULL -1
// 定义顺序栈元素的数据类型
typedef int DataType_t;
// 定义顺序栈的管理结构体
typedef struct SequenceStack {
DataType_t *Bottom; // 栈底地址
unsigned int Size; // 栈容量
int Top; // 栈顶元素的下标
} SeqStack_t;
// 创建顺序栈并初始化
SeqStack_t* SeqStack_Create(unsigned int size) {
SeqStack_t* Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t));
if (Manager == NULL)
{
perror("calloc memory for manager is failed");
exit(-1);
}
Manager->Bottom = (DataType_t *)calloc(size, sizeof(DataType_t));
if (Manager->Bottom == NULL)
{
perror("calloc memory for Stack is failed");
free(Manager);
exit(-1);
}
Manager->Size = size;
Manager->Top = -1;
return Manager;
}
// 判断顺序栈是否已满
bool SeqStack_IsFull(SeqStack_t* Manager)
{
return Manager->Top + 1 == Manager->Size;
}
// 入栈
int SeqStack_Push(SeqStack_t* Manager, DataType_t Data)
{
if (SeqStack_IsFull(Manager)) {
return ERROR_STACK_FULL;
}
Manager->Bottom[++Manager->Top] = Data;
return 0;
}
// 判断顺序栈是否为空
bool SeqStack_IsEmpty(SeqStack_t* Manager)
{
return Manager->Top == -1;
}
// 出栈
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{
DataType_t temp = 0; //用于存储出栈元素的值
//1.判断顺序栈是否为空
if ( SeqStack_IsEmpty(Manager) )
{
printf("SeqStack is Empty!\n");
return ERROR_STACK_FULL;
}
}
// 遍历顺序栈元素并打印
void SeqStack_Print(SeqStack_t* Manager)
{
printf("它的十六进制数:0x");
for (int i = 0; i <= Manager->Top; ++i) {
printf("%d", Manager->Bottom[i]);
}
printf("\n");
}
// 释放顺序栈占用的内存
void SeqStack_Destroy(SeqStack_t* Manager)
{
free(Manager->Bottom);
free(Manager);
}
int main(int argc, char const *argv[])
{
SeqStack_t *top = SeqStack_Create(10);//创建一个顺序栈
DataType_t data ; //定义顺序栈元素的数据类型
printf("请输入一个非负数的整数:");
scanf("%d",&data);
while(data)
{
SeqStack_Push (top, data%16); //把输入的数取余
data = data/16; //取余后记录剩下的元素
}
DataType_t p; //定义一个数用于输出遍历
while (1)
{
p = SeqStack_Pop(top);
SeqStack_Print(top) ; //数据出栈遍历
if (!SeqStack_IsEmpty(top)) //判断栈是否为空,为空就退出
{
break;
}
}
return 0;
}
标签:SeqStack,return,DataType,笔试,int,Manager,顺序
From: https://www.cnblogs.com/-110/p/18157080