数据结构
文章平均质量分 79
qicheng777
这个作者很懒,什么都没留下…
展开
-
数据结构之深度优先遍历
深度优先遍历:即从根节点开始遍历,从左到右依次遍历,遍历时应先将一条分支上遍历完才进行下一轮遍历。 如图:遍历顺序为:1 2 4 3 5程序如下:#include int book[101]; //用于标记是否已遍历过,未遍历则为值为0int sum; //每标记一次加 1 ,直到sum等于需要遍历的顶点个数n为止int n,e原创 2017-03-05 11:50:06 · 740 阅读 · 0 评论 -
单向链表的基本操作
一、链表与数组: 首先,我们来看看为啥我们有了数组,还需要链表呢?那么我们来看看链表与数组的区别。二者都属于一种数据结构: 从逻辑结构来看:1、 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。2、 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据原创 2017-08-02 16:53:53 · 685 阅读 · 0 评论 -
二分查找法(递归与非递归方式)
思想: 首先要确保数组中数是按顺序排列好的,假设我们要查找的数为277。要查找的数277:比较277与中间数的大小,如果刚好为277,则就算找到。如果大于277,排除另外一半,然后把新的half_num-1设置为上界。同理,如果小于277,则把half_num+1设置为下界 。然后继续重复之前的步骤。一、非递归#include <stdio.h>void create_num(i原创 2017-08-10 21:34:54 · 719 阅读 · 0 评论 -
二叉树的基本操作
一、树:树 :一种非线性数据结构树的应用:操作系统中:用树表示文件目录组织结构编译系统中: 用树表示源程序语法结构 相关概念常见表示方法:树有且仅有一个根节点树的结构定义是一个递归的定义树可以看做一个集合,每个集合下面又有很多子集合,所以单节点与子树之间可以表示为 T={跟结点,左孩子,右孩子} -实例:T1 ={A,B,C}当然,树还可以用括号表示,这样更加容易看上图可表示为:(A原创 2017-08-05 15:05:53 · 696 阅读 · 0 评论 -
循环buffer
循环buff即循环缓冲区,顾名思义,就是可以不断写不断读的一个局域,在缓冲区写满之后,如果还没有读取就不能继续写了,否则会把原来的覆盖掉。所以说这是个循环读写的过程,写指针写一个字节移动一次,读指针读一个字节移动一次,移动到buff的末尾位置,又从开始位置进行读写。重点代码分析:1、计算空闲空间/数据空间大小:设定总空间为size-1,始终保留1个字节来表示buff已满。先看看负数的二进制我们来求-原创 2017-08-27 16:52:03 · 5537 阅读 · 0 评论 -
C语言经典编程题
一、递归求一个数的阶乘:int factorial(int n){ while (n > 1) { return n*func(n-1); }}当然也可以不用while循环,因为都是n级运算,算法复杂度都为O(n),所以影响不大。int factorial(int n){ if(n == 0) { return 1;原创 2017-08-11 20:21:53 · 50655 阅读 · 6 评论 -
判断一个链表是否有环,并且找出入口点
1.如何判断是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时停止计数。3.如何判断环的入口点:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分别从碰撞点、头指针开始走,相遇的那个点就是连接点。为什么呢?需要一个简单的计算过程: (1)当fast与slow相遇时,sho转载 2017-09-28 10:06:33 · 592 阅读 · 0 评论