栈-实现十进制转换十六进制、括号匹配
- 设计一个进制转换步伐,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
- 通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串是否有用。要求设计算法实现查抄字符串是否有用,有用的字符串需满足以下条件:
A. 左括号必须用相同类型的右括号闭合。
B. 左括号必须以精确的顺序闭合。
C. 每个右括号都有一个对应的相同类型的左括号。
[code]/****************************************************** file name:sequencelist.c* author :zzlyx1239@126.com* date :2025.3.15* brief :顺序栈的实现* note :none** Copyright (c) 2025 zzlyx1239@126.com All Right Reserved********************************************************/#include #include #include //宏定义顺序表中的数据类型typedef int DataType_t;//定义一个顺序表布局体,声明顺序表首所在,大小,最后一个数据下标等各项参数typedef struct SequenceStack{ DataType_t *Bottom;//声明顺序栈首所在 int Size;//声明顺序栈大小 int Top;//声明顺序栈最后一个元素数组下标}SeqStack_t;//创建顺序列表并举行初始化SeqStack_t* SeqStack_Creat(unsigned int size){ //1.为所有顺序表管理者申请堆内存 SeqStack_t *Manager=(SeqStack_t*)calloc(1,sizeof(Manager)); //判断是否申请成功 if(NULL==Manager) { perror("calloc for Manager memory is failed!"); exit(-1);//异常退出 } //2.为所有元素申请堆内存 Manager->Bottom=(DataType_t*)calloc(size,sizeof(DataType_t)); if(NULL==Manager->Bottom) { perror("calloc for Manager->Bottom is failed!"); free(Manager); exit(-1);//异常退出 } //3.对顺序表举行初始化 Manager->Size=size; Manager->Top=-1; return Manager;}//判断顺序栈是否已经满了bool SeqStack_IsFull(SeqStack_t *Manager){ return Manager->Size==Manager->Top+1?true:false;}//顺序栈进栈bool SeqStack_Push(SeqStack_t *Manager,DataType_t data){ //判断顺序表是否已经满了 if(SeqStack_IsFull(Manager)) { printf("Sequence is Full!!!"); return false; } //顺序表没满,接纳尾插法插入数据 Manager->Bottom[Manager->Top+1]=data; Manager->Top++; 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.由于删除了一个元素,则必要让顺序栈的栈顶元素下标-1 temp = Manager->Bottom[Manager->Top--]; return temp;}//遍历顺序栈中的元素void SeqStack_Print(SeqStack_t *Manager){ for(int i=0; iTop;i++) { printf("Stack Element[%d]=%d\n",i,Manager->Bottom); }}//用栈实现十进制转换成十六进制void SeqStack_Dec2Hex(SeqStack_t *Manager,unsigned int data){ int temp; do { temp=data%16;//temp存储data被16取余 if(temp |