数据结构之栈相关应用

1.十进制转换八进制

void Conversion(SqStack S){
    InitStack(S);
    int N = 0;
    scanf("%d", &N);
    while(N){
        Push(S, N%8);
        N = N/8;
    }
    while(!StackEmpty(S)){
        int e;
        Pop(S, e);
        printf("%d", e);
    }
}

2.括号匹配算法

bool MatchBracket(SqStack S, char str[]){
    InitStack(S);
    bool flag = false;
    int i = 0;
    char ch;
    while(str[i] != '\0'){
        if(str[i] == '(' || str[i] == '['){
            Push(S, str[i]);
        }
        if(str[i] == ')'){
            GetTop(S, ch);
            if(ch == '('){
                Pop(S, ch);
                flag = true;
            }else{
            	flag = false;
                return flag;
            }
        }
        if(str[i] == ']'){
            GetTop(S, ch);
            if(ch == '['){
                Pop(S, ch);
                flag = true;
            }else{
            	flag = false;
                return flag;
            }
        }
        i++;
    }
    if(!StackEmpty(S)) flag = false;
    return flag;
}

测试

int main(){
    SqStack S;
    char str[] = "((([])))";
    bool b = MatchBracket(S, str);
    b ? printf("匹配\n"):printf("不匹配\n");
    return 0;
}

输出:

匹配

3.行编辑程序

void LineEdit(SqStack S){
/*
*   # 表示退一格
*   @ 表示退一行
*/
    InitStack(S);
    char ch = getchar();
    while(ch != EOF){
        while(ch != EOF && ch!='\n'){
            switch(ch){
                case '#' : Pop(S, ch); break;
                case '@' : ClearStack(S); break;
                default : Push(S, ch); break;
            }
            ch = getchar();
        }
        if(ch != EOF) ch = getchar();
    }
    /*打印结果*/
    SqStack PrintStack;
    InitStack(PrintStack);
    while(!StackEmpty(S)){
        Pop(S, ch);
        Push(PrintStack, ch);
    }
    while(!StackEmpty(PrintStack)){
        Pop(PrintStack, ch);
        printf("%c", ch);
    }
    DestroyStack(S);
    DestroyStack(PrintStack);
}

测试:
在这里插入图片描述注:Windows下ctrl + z 为EOF键入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值