![]()
点击查看代码
#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;
}