数据结构与算法(基本认知)

本文介绍了算法的基本概念,包括时间复杂度和空间复杂度的评估,以及数据结构如栈、队列和二叉树的逻辑结构及其常见实现。深入探讨了排序与查找算法,如冒泡排序、插入排序和二分查找,并提到了编程中常见的错误类型及调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是算法

     **是对特定问题求解步骤的一种描述,是指令的有限序列**
     **评价算法的优劣:
           时间复杂度和空间复杂度其实就是所耗时间与空间关于输入数据规模的函数
            1)时间复杂度
                   算出结果的时间花费多少
            2)空间复杂度
                   算出结果需要的内存字节的多少
            3)可读性和可维护性**

什么是数据结构

   **是相互之间存在的一种或者多种特定关系的数据元素的集合
     数据结构包含三个层面:
         1)逻辑结构
         2)物理结构
         3)运算结构
      实际编程过程中使用比较多的逻辑数据结构
          栈
            特点:后进先出
            顺序存储:stack_base_array.c stack_base_array.h stack_base_array_test.c
             gcc  stack_base_array.c stack_base_array_test.c
             链式存储:stack_base_list.c stack_base_list.h stack_base_list_test.c
            gcc stack_base_list.c stack_base_list_test.c
            队列:先进先出
               顺序存储:queue_base_array.c  queue_base_array.h  queue_base_array_test.c
           gcc queue_base_array.c queue_base_array_test.c 
           链式存储:queue_base_list.c        queue_base_list_test.c queue_base_list.h
           gcc queue_base_list.c queue_base_list_test.c**

二叉树

 **有序二叉树
       笔试题容易考的内容:先序遍历  中序遍历   后序遍历的实现算法
       重点:创建二叉树   插入节点   三种遍历方式
             删除节点   销毁二叉树**

排序与查找

  **排序
      冒泡排序(笔试题容易考)
                  大数据沉底
       插入排序:第一个数据自然有序
                 前两个数据排序  使其有序
                 前三个数据排序  使其有序
                  。。。
                  前n个数据排序    使其有序
       选择排序:选出小的放到前面
       快速排序:排序速度最快的
       归并排序:**
     查找:
          **线性查找
            二分查找**

语法错误:

         **只关注只解决第一个错误,如果错误所在行检查不出错误,往前找  不要往后找**

程序BUG(逻辑错误)的解决方式

 **1)print打印(用的最多)
   2)gdb单步调式程序
           vim gdb.c
   gcc gdb.c -g //-g, 使生成的可执行程序中包含调试信息
   gdb a.out
   (gdb)l         //l, list 列出代码
   (gdb)l 
   (gdb)b 10      //b, breakpoint(断点) 程序执行到断点位置 自动暂停
                  // 在i=0;行上设置了断点
                 
   (gdb)r         //r, run 运行程序
                  //程序运行到第10行暂停 注意第10行代码尚未执行
   (gdb)l 10 
   (gdb)p a       //p, printf 打印
                  //打印a 变量的取值
   (gdb) p str
   (gdb)p &a      //打印a的地址
   (gdb) p name   //打印数组内容
   (gdb)l 10
   (gdb)n         //next, 单步执行 执行一步就停下来
   (gdb)n
   (gdb)n         // 执行了a+i代码
   (gdb) p i
   (gdb) p a
   (gdb) n
   (gdb) n
   (gdb) p name 
         重复执行for循环的过程
   (gdb) b 17    // printf("%s\n", name); 加断点
   (gdb) c       //continue, 继续 直到遇到断点才暂停
   (gdb) p name
   (gdb) q       //quit 退出

通过以上方式可以监视你的程序每个一个执行步骤 每步之后变量取值是否是你需要的值都可以观察

快速定位段错误的方式:
gcc gdb.c -g
ulimit -c unlimited
./a.out 执行会出段错误的程序
ls core //如果产生段错误,会产生一个core文件
gdb a.out -c core
(gdb) bt **

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值