豹筒生 发表于 5 天前

栈-实现十进制转换十六进制、括号匹配

栈-实现十进制转换十六进制、括号匹配


[*]设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
[*]通过键盘输入一个包括'(' 和 ')' 的字符串string ,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:
A. 左括号必须用相同类型的右括号闭合。
B. 左括号必须以正确的顺序闭合。
C. 每个右括号都有一个对应的相同类型的左括号。

/******************************************************   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 //宏定义顺序表中的数据类型typedefint 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 forManager 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=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;        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
页: [1]
查看完整版本: 栈-实现十进制转换十六进制、括号匹配