【紫*书】第6章 数据结构基础 #例题#习题

习题6-1(error)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

/* 【平衡的括号】(UVa 673) //error的代码
输入一个包含“( )”和“[ ]”的括号序列,判断是否合法。
具体规则如下:1.空串合法。2.如果A和B都合法,则AB合法。
3.如果A合法则(A)和[A]都合法。 */

/*【分析】遍历字符串,同时用stack栈维护遍历过却没配对的括号
(1)左括号入栈 (2)右括号寻找匹配,退出或一起出栈 {后进先出}
(3)遍历完,栈不为空,则退出,false。  */

bool okk(const char* s) {
    int len=strlen(s);
    stack<char> st;
    for(int i=0;i<len;i++){
        char c=s[i];
        if(c=='('||c=='[') st.push(c);
        else{
            assert(c==')'||c==']'); //assert作用是如果条件错误,就终止程序执行
            if(st.empty()) return false; //不知道为什么这里的判断不能执行...
            char t=st.top();
            if(c==')'){
                if(t=='(') st.pop();
                else break;
            }
            if(c==']'){
                if(t=='[') st.pop();
                else break;
            }
        }
    }
    return st.empty(); //空 才能返回true
}

int main(){
    int n; char ss[256]; cin>>n;
    while(n--){
        gets(ss);
        if(okk(ss)) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}


习题6-2

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

/* 【S树】(UVa 712)
给出一棵满二叉树,每一层代表一个01变量,取0时往左走,取1时往右走。
给出所有叶子的值以及一些变量xi的取值,求每个查询到达的0叶子的值。*/

/* 【分析】观察发现,每遍历一个输入的字符(xi)后,就沿着树下降一层。
目标叶子所在的区间减小一半,处理完所有的xi后,刚好到达叶子。
先将每个叶节点的值记录在a[1..256]数组中,设标记变量L=1 。
当读到0时L=L*2;当读到1时L=L*2+1;由于是查询叶节点的值,要将L减去2^n-1 。
即L=L-2^n+1。注意:1、注意输入 2、将每树查询到的值用b[1..20000]储存后统一输出。 */

int n,m;
char termi[200];
vector<int> order;

void Calc(){
    char temp[10],vva[200]; //xi字符串组,vva结点价值字符串组
    int val;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值