xym-ee
  • 计算机与嵌入式开发学习
  • 1-1.编程基础
    • C 语言
      • C 中的数据
      • C 语言基础
      • 字符输入输出
      • 函数
      • 数组和指针
      • 字符串处理
      • 存储类别
      • 文件 I/O
      • 复杂数据类型
      • 位操作
      • 预处理和 C 库
    • 数据结构和算法入门
    • leetcode 刷算法题
      • 递归与栈
      • 二叉树与递归
      • 回溯问题
      • 动态规划 1
    • 基本工具和使用
      • shell
      • shell 脚本
      • vim 编辑器
      • 命令行数据整理
      • 命令行环境和配置
  • 1-2.计算机系统基础(CSAPP)
    • 1.计算机基础
    • 2.数据的表示
    • 3.加减运算
    • 4.乘除运算
    • 5.程序的表示转换和链接
    • 6.IA32指令
    • 7.过程调用
    • 10.程序的链接
  • 1-3.数字电路、计算机组成
    • 1.数字电路、virtual circuit board
    • 2.计算机组成/steam:Turing Complete
    • 3.微机原理与接口技术(8086)
  • 1-4.计算机网络
    • 1.从浏览器开始
    • 2.协议栈和网卡
    • 3.网络设备
    • 4.运营商、接入网
    • 5.服务器
    • 6.数据返回浏览器
    • socket编程
  • 1-5.操作系统
    • 0.绪论
      • 1.应用视角的操作系统
      • 2.硬件视角的操作系统
      • 3.数学视角的操作系统
      • 4.状态机模型的应用
    • 1.并发
      • 1.并发 bug 的解决思路
      • 2.互斥
      • 3.同步
      • 4.信号量
      • 5.真实并发
      • 6.调试技巧
      • 7.os kernel 实现
    • 2.虚拟化
      • 1.操作系统上的进程
      • 2.进程的地址空间
      • 3.系统调用和unix shell
      • 4.C 标准库的实现
      • 5.linux 操作系统
      • 6.可执行文件和加载
      • 7.动态链接和加载
      • 8.内核的实现
      • 9.fork 的应用
    • 3.持久化
      • 1.存储设备的原理
      • 2.输入输出设备模型
      • 3.设备驱动程序
      • 4.文件系统 API
      • 5.fat 和 unix 文件系统
      • 6.持久数据的可靠性
    • 总结
  • 2-1.嵌入式裸机开发
    • 嵌入式系统通信接口与协议
    • cortex-m 内核芯片裸机开发
    • MPU
  • 2-2.中等规模系统开发
    • LVGL 图形库
    • 裸机开发的软件框架
    • 基于 rtos 开发
  • 2-3.armv7-m架构与 rtos 原理
    • armv7-m 架构
    • rt-thread 内核实现
    • rt-thread 驱动开发
  • 3-1.linux 应用开发基础
  • 3-2.linux 镜像构建
    • uboot 使用
    • uboot 适配
    • uboot 启动分析
    • uboot 自定义命令
    • linux 内核适配
    • linux 内核启动分析
    • busybox 根文件系统构建
  • 3-3.linux 驱动开发
    • 驱动开发基础
    • sysfs
    • led 驱动
    • 设备树
    • pinctrl 和 gpio 子系统
    • 并发控制
由 GitBook 提供支持
在本页
  • 刷算法题
  • 一些输入输出
  • 读取一个字符串
  • C 库中的一些函数
  • 代码测试

这有帮助吗?

  1. 1-1.编程基础

leetcode 刷算法题

刷算法题

简单题,主要是基础的数据结构,比如排序,链表,队列、栈及一些字符串的算法。中等题,会涉及BFS, DFS,动态规划,树等。

ACM 模式常用的输出输入函数

C 库函数

  • 字符串:3,49,30

  • 线性表:86,16,27,732

  • 队列:641,406,899

  • 栈:946,116,117,895

  • 哈希表:61,729,25,554

  • dfs:105,112,98,494,547,1254

  • bfs:1091,1129,102,101,752

一些输入输出

输入示例 3 4 11 40 输出示例 7 51

#include <stdio.h>
int main()
{
    int a, b;
    while (scanf("%d %d\n", &a, &b) != EOF)
    {
        int c = a + b;
        printf("%d\n", c);
    }
}

读取一个字符串

#include <stdio.h>
#include <string.h>
 
int main()
{
    char str[1000];
    int a=0, i=0;
    while(scanf("%s",str) != EOF);
    a = strlen(str);
    printf("%d",a);
}

到空格、换行就停止了。

要读取一行包含空格的

scanf("%[^/n]", str);

C 库中的一些函数

快速排序在 stdlib.h 中,声明如下

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
  • base: 指向要排序的数组的指针。

  • num: 数组中元素的数量。

  • size: 数组中每个元素的大小(以字节为单位)。

  • compar: 指向用于比较两个元素的函数的指针。该函数接受两个 const void* 类型的参数,并返回一个 int 值:

    • 如果第一个元素小于第二个元素,返回负值。

    • 如果第一个元素等于第二个元素,返回 0。

    • 如果第一个元素大于第二个元素,返回正值。

因为不知道要排序的是什么类型的值,所以都用了 void* ,需要自己实现一个两个元素比较的函数。使用示例

#include <stdio.h>
#include <stdlib.h>

// 比较函数:升序排序
int compare_ints(const void *a, const void *b) {
    int int_a = *(int *)a;
    int int_b = *(int *)b;
    return (int_a > int_b) - (int_a < int_b);  // 相当于 int_a - int_b,但避免溢出问题
}

int main() {
    int values[] = { 88, 56, 100, 2, 25, 15 };
    size_t num_values = sizeof(values) / sizeof(values[0]);

    // 使用 qsort 对数组进行排序
    qsort(values, num_values, sizeof(int), compare_ints);

    // 打印排序后的结果
    for (size_t i = 0; i < num_values; i++) {
        printf("%d ", values[i]);
    }

    return 0;
}

代码测试

ACM 模式下在自己的电脑上做测试。

准备好测试用例。

diff <(cat bottle_case | ./a.out) bottle_out
上一页数据结构和算法入门下一页递归与栈

最后更新于8个月前

这有帮助吗?