顺序栈把十进制(Dec2Hex)转16进制

点击查看代码
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
//定义数据类型适合多种情况
typedef int DataType_t;
//创建栈结构体,包含首地址,容量,最后一个元素下标
typedef struct SequneceStack
{
	DataType_t *Bottom;
	unsigned int Size;
	int Top;
}SeqStack_t;
//创建顺序表并初始化
SeqStack_t *SeqStack_Creat(unsigned int size)
{
	SeqStack_t *Manager = (SeqStack_t *)calloc(1,sizeof(SeqStack_t));//注意sizeof后面的类型
	if(NULL ==  Manager)
 	{
		perror("calloc memory for Manager is failed\n");
		exit(-1);
	}
	Manager->Bottom = (DataType_t *)calloc(size,sizeof(DataType_t));//注意栈底申请内存并初始化,否则可能段错误
	if(NULL == Manager->Bottom)
	{
		perror("calloc memory for Bottom is failed\n");
		free(Manager);
		exit(-1);
	}
	Manager->Size = size;
	Manager->Top = -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)
{
	if(SeqStack_IsFull(Manager))
	{
		printf("the stack is full\n");
		return false;
 	}
	Manager->Bottom[++Manager->Top] = data;
	return true;
}
//判断是否为空
bool SeqStack_IsEmpty(SeqStack_t *Manager)
{
	return (Manager->Top == -1)? true:false;
}
//出栈
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{
	if(SeqStack_IsEmpty(Manager))
	{
		printf("the stack is empty\n");
		return -1;
	}
	DataType_t Temp = Manager->Bottom[Manager->Top--];
	return Temp;
}
//Dec2Hex
bool SeqStack_Dec2Hex(SeqStack_t *Manager,DataType_t data)
{
	do
	{
		int remainder = data%16;			//存储余数
		if(remainder < 10)				//要分为0—9,10—15两段分析
		{
			SeqStack_Push(Manager,remainder + '0');
		}else
		{
			SeqStack_Push(Manager,remainder +'A' - 10);
		}
		data/=16;
	}while(data != 0);
	printf("0x");
	while(!SeqStack_IsEmpty(Manager))
	{
		printf("%c",SeqStack_Pop(Manager));
	}
	printf("\n");
	return true;
}
//
int main(int argc,char const* argv[])
{
	DataType_t data;
	SeqStack_t *Manager = SeqStack_Creat(100);
	printf("Please input the data:");
	scanf("%d",&data);
	SeqStack_Dec2Hex(Manager,data);
	return 0;
}





posted @ 2025-06-03 14:54  Lè_Sage  阅读(7)  评论(0)    收藏  举报