利用栈进行数制转换和括号匹配(C语言)

数制转换:将十进制数转换为任意进制数。由数制转换的计算公式 N = (N / d) × d + N % d (其中N为想转换的十进制数,d为想转换的进制) 我们可以知道其转换后的结果是逆序输出,故可以利用栈的先进后出的特性,将每一步计算的结果依次入栈之后再出栈,得出的结果正好是转换后的数。

括号匹配:即利用栈检验输入的括号是否正确配对,包括了三种括号的匹配,即( )、[ ]、{ }。其嵌套的顺序随意,即 [ ( { } ) ] 或 { ( [ ] ) } 等为正确匹配,而如果交叉如 [ ( ] ) 或 { ( [ ) ] }等则匹配失败。
利用栈来实现其具体思想为:初始化一个栈,依次读取输入的括号,若为左括号,则将括号压入栈中;若为右括号,则取栈顶的元素,将该元素与右括号进行配对,若配对成功,则弹出该栈顶元素。继续进行下一个括号的读取与判断,若读取完输入的括号之后栈为空,则证明压入的元素已全部弹出,即全部匹配完成;若栈不为空,则匹配失败。

代码如下:
(注:进行括号匹配时将主函数中数制转换部分的代码注释掉即可)

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
typedef int ElemType;
#define STACK_INT_SIZE 100
typedef struct {
   
    ElemType *base;//栈底
    int top;//栈
    int stacksize;  //当前已分配的存储空间
}SeqStack;
/*栈的初始化*/
void InitStack(SeqStack *S){
   
    S->base=(ElemType*)malloc(STACK_INT_SIZE* sizeof(ElemType));
    if(!S->base) {
    exit(0);}
    S->top=-1;
    S->stacksize=STACK_INT_SIZE;
}
/*销毁栈*/
void DestroyStack(SeqStack *S){
   
    if(!S){
   
        free(S->base);
        free(S);
    }
}
/*判断栈空*/
bool isEmpty(SeqStack *S){
   
    return (S
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值