11.31链表,之前的数据结构(未完,饼)

news2024/12/26 11:05:59

 根据输入序列建立二叉树

链表

回顾一下二分面积最小

一些性质题回顾

哈夫曼树构建

第十一周——哈夫曼树

5
1 2 2 5 9

37

桶排序

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
#include<string>
using namespace std;
//const int N = 10000;
//int arr[N];
//int search(int begin, int end, int target) {
//    if (begin > end) { return -1; }
//    int left = begin, right = end, mid = (left + right) >> 1;
//    while (left <= right) {
//        if (arr[mid] == target) {
//            return mid;
//        }
//        else if (arr[mid] < target) {
//            right = mid - 1;
//        }
//        else {
//            left = mid + 1;
//        }
//        mid = (left + right) >> 1;
//    }
//    return 0;
//}
//typedef struct node {
//    int data;
//    node* lchild, * rchild;
//}*tree;
//int high(tree root) {
//    if (root) {
//        return max(high(root->lchild), high(root->rchild)) + 1;
//    }
//    return 0;
//}
//int arr[100];
//int siz = 0;
//void shiftup(int child) {
//    int parent = (child - 1) / 2;
//    while (child > 0) {
//        if (arr[parent] >= arr[child]) {
//            break;//判断顶堆,就从堆顶到叶子结点走,如果任意一条路是递增的,那么就是小顶堆;
//            //如果任意一条路都是递减的,那么就是大顶堆。
//        }//如果父母结点比孩子结点大,就停止调整,这里是向上调整,所以向上是更大的,也就是顶上是最大的,所以是大顶堆
//        else {
//            swap(arr[parent], arr[child]);
//            child = parent;
//            parent = (child - 1) / 2;
//        }
//    }
//}
//void insert(int num) {
//    arr[siz++] = num;
//    shiftup(siz - 1);
//}
//
//void shiftdown(int parent) {
//    int child = parent * 2 + 1;
//    while (child <= size - 1) {
//        if (child + 1 <= size - 1 && arr[child + 1] > arr[child]) {
//            child++;
//        }
//        if (arr[parent] > arr[child]) {
//
//        }
//    }
//}
//int popheal() {
//    int num = arr[0];
//    swap(arr[0], arr[size - 1]);
//    size--;
//    shiftdown(0);
//    return num;
//}
//14 21 10 8 5 2
//12 10 8 7 6 3
//10 8 2 1 1 1
//const int N = 1e5 + 5;
//int arr[N];
//int n, m;
//bool check(int d) {
//    int num = 1, target = a[0] + d;
//    for (int i = 1; i < n; i++) {
//        if (arr[i] < target) {
//            continue;//这里不能放牛
//        }
//        num++;
//        target = arr[i] + d;
//    }
//    if (num >= m) {
//        return true;
//    }
//    else {
//        return false;
//    }
//}
//优先特点值小的那个,不能超过
//会产生不满意度
//目的是要输出不满意度
const int N = 10000 + 5, mod = 1e6;
typedef struct node {
    int ch[2], id;
    long long val;
}tree[N];
void rotate(int& cur, int f) {
    int son = tree[cur].ch[f];
    tree[cur].ch[f] = tree[son].ch[f ^ 1];
    tree[son].ch[f ^ 1] = cur;
    cur = son;
}
int tot;
void insert(int& cur, int val) {
    if (!cur) {
        cur = ++tot;
        tree[cur].val = val;
        tree[cur].id = rand();
        return;
    }
    int d = val > tree[cur].val;
    insert(tree[cur].ch[d], val);
    if (tree[tree[cur].ch[d]].id < tree[cur].id) {
        rotate(cur, d);
    }
}
int ls = tree[cur].ch[0], rs = tree[cur].ch[1];
void del(int& cur, int val) {
    if (!cur) { return; }
    if (val == tree[cur].val) {
        if (!tree[cur].ch[0] || !tree[cur].ch[1]) {
            cur = tree[cur].ch[0] + tree[cur].ch[1];
            return;
        }
        int d = tree[ls].id > tree[rs].val;
        rotate(cur, d);
        del(cur, val);
    }
    del(tree[cur].ch[val > tree[cur].val], val);
}
long long pred(int cur, int val) {
    if (!cur) {
        return 0;
    }
    if (val <= tree[cur].val) {
        return pred(ls, val);
    }
    return max(tree[cur].val, pred(rs, val));
}
long long nex(int cur, int val) {
    if (!cur) {
        return 0;
    }
    if (val >= tree[cur].val) {
        return nex(rs, val);
    }
    return min(tree[cur].val, nex(ls, val));
}
int s;
long long ans;
int main() {
    int n, rt = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int bz, x;
        cin >> bz >> x;
        if (bz == 0) {
            if (s <= 0) {
                insert(rt, x);
            }
            else {
                int k1 = pred(rt, x), k2 = nex(rt, x);
                int dele = k1;
                if (k2 - x < x - k1) {
                    dele = k2;
                }
                ans += abs(dele - x);
                ans %= mod;
                del(rt, dele);
            }
            s--;
        }
        else {
            if (s >= 0) {
                insert(rt, x);
            }
            else {
                int k1 = pred(rt, x), k2 = nex(rt, x);
                int dele = k1;
                if (k2 - x < x - k1) {
                    dele = k2;
                }
                ans += abs(dele - x);
                ans %= mod;
                del(rt, dele);
            }
            s++;
        }
    }
    cout << ans << endl;
    return 0;
}

之前的数据结构

第一次实验——模拟队列

第一次实验——括弧匹配

第一次实验——胡同

第一次实验——列车重拍

第六周习题——字符串匹配

第六周习题——后缀表达式

第三周习题——顺序表删除

第三周习题——寻找链表前驱节点

数据结构性质

队列,计算空满

复习之前做过的题

第一次实验——倍数对

第六周习题——7-3

第二周习题——冰雹猜想

第一周习题——全排列

第一周习题——数雷,复习bfs

第二次实验——BFS

求叶子节点个数

new的时候这样即可,这里调用的就是结构体自身的构造函数;如果要传入值进行初始化,就需要重载一个带参的构造函数

递归建树的另一种写法

tree creat() {
    char ch;
    cin >> ch;
    tree root = new node;
    if (ch == '#') {
        root = nullptr;
    }
    else {
        root->data = ch;
        root->lchild = creat();
        root->rchild = creat();
    }
    return root;
}

    tree root = create(); 

总代码 

typedef struct node {
    char data;
    node* lchild, * rchild;
    //node(char x) :data(x), lchild(nullptr), rchild(nullptr) {}
    //node() :data(), lchild(nullptr), rchild(nullptr) {}
}*tree;
tree creat() {
    char ch;
    cin >> ch;
    tree root = new node;
    if (ch == '#') {
        root = nullptr;
    }
    else {
        root->data = ch;
        root->lchild = creat();
        root->rchild = creat();
    }
    return root;
}
int cntleaf(tree root) {//这里就直接传入tree,就表明是node的指针型
    if (root) {
        if (root->lchild || root->rchild) {
            return cntleaf(root->lchild) + cntleaf(root->rchild);
        }
        return 1;
    }
    return 0;
}
void pre(tree root) {
    if (root) {
        cout << root->data;
        pre(root->lchild);
        pre(root->rchild);
    }
}
int main() {
    tree root = create();
    pre(root);
    cout << endl;
    cout << cntleaf(root);
    return 0;
}

 求树的高度

int high(tree root) {
    if (root) {
        if (root->lchild || root->rchild) {
            return 1 + max(high(root->lchild), high(root->rchild));
        }
        else {
            return 1;
        }
    }
    return 0;
}

牛客网题复习

牛客网选择题

二叉树的一些定义,真、满、完全,还有一些计算公式

看一些文章进行复习

力扣题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程 - 第8章 面向对象建模 - 2 静态建模

静态建模&#xff08;类和对象建模&#xff09; 类和对象模型的基本模型元素有类、对象以及它们之间的关系。系统中的类和对象模型描述了系统的静态结构&#xff0c;在UML中用类图和对象图来表示。 类图由系统中使用的类以及它们之间的关系组成。类之间的关系有关联、依赖、泛…

Linux MIPI 调试中常见的问题

一、概述 做嵌入式工作的小伙伴知道&#xff0c;有时候程序编写没有调试过程中费时&#xff0c;之间笔记里有 MIPI 摄像头驱动开发的过程&#xff0c;有需要的小伙伴可以参考&#xff1a;Linux RN6752 驱动编写。而我也是第一次琢磨 MIPI 协议&#xff0c;其中有很多不明白的地…

python之pyqt专栏10-键盘事件

需求 通过按键盘的上下左右&#xff0c;移动button的位置。 UI界面设计 代码 # 导入sys模块 import sysfrom PyQt6.QtCore import Qt # PyQt6.QtWidgets模块中导入QApplication, QWidget from PyQt6.QtWidgets import QApplication, QWidget# untitled模块中导入Ui_Form类 f…

进程间通信2

3. system V-IPC 3.1 知识点 ipcs -a查看所有的ipc对象 在系统中他们都使用一种叫做 key 的键值来唯一标识&#xff0c;而且他们都是“持续性”资源——即他 们被创建之后&#xff0c;不会因为进程的退出而消失&#xff0c;而会持续地存在&#xff0c;除非调用特殊的函数或者…

带你手搓阻塞队列——自定义实现

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是——阻塞队列的自定义实现&#xff0c;通过自定义实现一个阻塞队列&#xff0c;可以帮助我们更清晰、更透彻的理解阻塞队列的底层原理。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章…

C++stack

目录 1.什么是stack 2.容器适配器 3.stack的使用 top push pop 4.模拟实现stack 1.什么是stack 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。(后进先出) 2. stack是作为容…

进程间通信方式——管道

进程间通信方式——管道 1、管道2、匿名管道2.1 创建匿名管道2.2 进程间通信 3、有名管道3.1 创建有名管道3.2 进程间通信 4、管道的读写行为 原文链接 1、管道 管道的是进程间通信&#xff08;IPC - InterProcess Communication&#xff09;的一种方式&#xff0c;管道的本质…

深入 C 语言和程序运行原理 实战项目代码在CentOS 7上编译

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)&#xff0c;uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64。 安装gtest 参考博客《使用gtest和lcov测试代码覆盖率》 wget https://github.com/google/googletest/archive/refs/…

YOLOv5项目实战(5)— 算法模型优化和服务器部署

前言:Hello大家好,我是小哥谈。近期,作者所负责项目中的算法模型检测存在很多误报情况,为了减少这种误报情况,作者一直在不断优化算法模型。鉴于此,本节课就给大家详细介绍一下实际工作场景中如何去优化算法模型和进行部署,另外为了方便大家进行模型训练,作者在文章中提…

Promise的resolve和reject方法(手写题)

1.resolve 2.reject 3.手写 1.resolve //构造函数上添加 resolve 方法 Promise.resolve function (value) {return new Promise((resolve, reject) > {if (value instanceof Promise) {value.then((val) > {resolve(val)},(err) > {reject(err)})} else {resolve(v…

国内首所国际职业培训学院落户深圳盐田揭幕开业

11月26日&#xff0c;中科国药•中科大有大健康上市企业孵化平台迎来了国内首所国际职业学院——深圳市盐田区国际职业培训学院的正式落成与揭幕仪式。中科大有高新科技有限公司董事长、长江商学院MBA\FMBA金融导师、深圳市中科国药生物医药研究院理事长、深圳市盐田区国际职业…

HarmonyOS到底有哪些独特之处?你真正了解鸿蒙多少!

鸿蒙系统太炸裂了&#x1f4a5;我已经后悔了&#x1f62d;后悔没早点学习鸿蒙 HarmonyOS 概念&#xff0c;系统定位 1&#xff1a;鸿蒙系统是由华为公司自主研发的全球化开放源代码操作系统&#xff0c;它具有以下特别之处&#xff1a; 2&#xff1a;分布式架构&#xff1a;…

华为鸿蒙工程师成“热门”!最高年薪160万,只看技术不看年龄

引言&#xff1a; 今天&#xff0c;在互联网行业&#xff0c;超过30岁的工程师往往被认为是“码农”的生命周期终点。然而&#xff0c;华为鸿蒙系统的崛起&#xff0c;却再次给予了这些35岁以上的工程师们第二春的机会。国内一线互联网公司纷纷向鸿蒙系统靠拢&#xff0c;导致…

c语言练习13周(1~5)

输入任意整数n求以下公式和的平方根。 读取一系列的整数 X&#xff0c;对于每个 X&#xff0c;输出一个 1,2,…,X 的序列。 编写double fun(int a[M][M])函数&#xff0c;返回二维数组周边元素的平均值&#xff0c;M为定义好的符号常量。 编写double fun(int a[M])函…

设计模式-结构型模式之桥接设计模式

文章目录 三、桥接模式 三、桥接模式 桥接模式&#xff08;Bridge&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得实体类…

Unity 使用Horizontal Layout Group和Toggle制作多个水平开关按钮实现自动排列和单个点击放大后的自动排列。

Unity的布局组件Horizontal Layout Group是很好用的&#xff0c;当然也包括其它布局组件也一样好用。 比如要实现多按钮开关自动水平排列&#xff0c;那么就可以使用它了。 首先我们为按钮创建个父物体&#xff08;我这里使用了Scroll View中的Content作为父物体&#xff09;…

elementUI实现根据屏幕大小自适应换行,栅格化布局

需求&#xff1a; 默认一行展示4个卡片&#xff1b;当屏幕小于某个大小的时候&#xff0c;一行展示3个卡片&#xff1b;再小就展示2个&#xff1b;以此类推&#xff0c;最小就展示1个。 效果卡片样式如下图&#xff1a; 默认一行4个 屏幕缩小到某个阈值&#xff0c;一行展示…

11.26电梯控制器设计分析

项目三 电梯控制器设计&#xff08;*****&#xff09; 设计一个多楼层的电梯控制器系统&#xff0c;并能在开发板上模拟电梯运行状态。可以利用按键作为呼叫按键&#xff0c;数码管显示电梯运行时电梯所在楼层&#xff0c;led灯显示楼层叫梯状态。 就是初始默认在1楼&#xff0…

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Kaggle-水果图像分类银奖项目 pytorch Densenet GoogleNet ResNet101 VGG19

一些原理文章 卷积神经网络基础&#xff08;卷积&#xff0c;池化&#xff0c;激活&#xff0c;全连接&#xff09; - 知乎 PyTorch 入门与实践&#xff08;六&#xff09;卷积神经网络进阶&#xff08;DenseNet&#xff09;_pytorch conv1x1_Skr.B的博客-CSDN博客GoogLeNet网…