数据结构复习(持续更新)

试卷1:

一、算法设计题

1.已知Q是一个非空队列,S是一个空栈。使用Pascal或C语言编写一个算法,仅用队列和栈的ADT函数和少量工作变量,将队列Q中所有元素逆置。

顺序取出队元素,入栈;所有元素入栈后,再从栈中逐个取出,入队。算法如下:

cpp 复制代码
reverse_queue(queue q.stack s){
//用栈s逆置队列q
    while !isempty(q){//取所有队列元素入栈 只要队列不为空就出队入栈
        data=dequeue(q);
        push(s,data);
    }//while
    while !isempty(s){//取所有栈元素入队 只要栈不为空就继续出站入队
        data=pop(s);
        enqueue(q.data);
    }//while
}//reverse_queue

2.

cpp 复制代码
unsigned char isBalanced(char * string) {
    int i = 0;
    char c;
    
    while (string[i] != '\0') {
        char ch = string[i]; // 获取当前字符
        
        // 1. 如果是左括号,直接压栈
        if (ch == '(' || ch == '[' || ch == '{') {
            push(ch);
        } 
        // 2. 如果是右括号,需要检查匹配情况
        else if (ch == ')' || ch == ']' || ch == '}') {
            // 如果栈为空却来了右括号,说明不平衡
            if (isempty()) return 0;
            
            c = pop();
            // 检查弹出的左括号是否与当前右括号匹配
            if ((ch == ')' && c != '(') ||
                (ch == ']' && c != '[') ||
                (ch == '}' && c != '{')) {
                return 0;
            }
        }
        
        i++; // 记得移动到下一个字符,否则会死循环哦!
    }

    // 3. 最后检查:如果字符串遍历完了,栈里还有多余的左括号,也是不平衡
    return isempty() ? 1 : 0;
}
相关推荐
今晚打老虎15 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
不会就选b17 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
Logic10120 小时前
C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
青山木21 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
SelectDB技术团队1 天前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
kiracrimson1 天前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
Logic1011 天前
C语言/数据结构位运算题解:异或XOR找出星球探险中的“独特能量石“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
hnjzsyjyj1 天前
洛谷 P1339:[USACO09OCT] Heat Wave G ← Bellman-Ford 算法
数据结构·bellman-ford 算法
SelectDB技术团队1 天前
ClickHouse 存日志的能力边界:并发、检索与 trace 回放的实测对照
数据结构·数据库·clickhouse·日志分析·apache doris·日志存储
垆边人似月.1 天前
华为算法题:最长连续递增子序列的变
数据结构·算法·leetcode