算法:数据结构(一)

数据的逻辑结构主要分为线性和非线性;

  • 线性:连成一条线的结构,如 数组,链表,队列,栈等;
  • 非线性:数据之间的关系是非线性的,如 堆,树,图等;

数组

是一个有限且类型相同的数据集合,在内存中是一段连续的内存区域。数组支持随机访问,通过数组内存空间的首地址加上元素的偏移量计算出某个元素的内存地址;

链表

是一个物理存储单元上非连续,非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针连接次序实现的。查找某个节点,会一个个遍历。插入/删除操作,只需要修改指针的指向即可。用于插入/删除频繁的场景。

  • 单向链表:每一个节点通过“指针”连接,每个节点都有两部分组成,一部分是数据,另一部分是后继指针(存储后一个节点的地址)。开始的节点称为 head,末尾节点的指针指向 null。
  • 双向链表:每个节点有两个指针,分别指向上一个和下一个。
  • 循环链表:一种特殊的单向链表。只不过将单向链表的尾节点的指针指向了 head 节点。

栈(stack 堆栈)

是一个先进后出(后进先出)的、操作受限(虽有两端,但是只允许一端插入/删除)的线性表,like a box。可以用数组/链表实现一个栈。前者称为顺序栈,后者称为链式栈。

队列(queue)

是一个先进先出的、操作受限(只能队尾插入新元素,从队首出队)的线性表。

  • 顺序队列:用数组实现的队列,用前(front)后(rear/tail)两个指针实现的。
  • 链式队列:用链表实现的队列,也是用两个指针实现的。
  • 循环队列:用数组实现的队列,解决顺序队列尾部已满,向前移动数据,释放尾部空间的情况的。判断队满的 公式:(tail+1)%n=head 。
  • 优先队列:用堆实现的队列,分为最大优先队列和最小优先队列。


为什么要取悦自己?

—— 因为想要看到一个更加真实的自己。同时对于这个真实的自己给予认可、肯定以及欣赏。进而强大自己的内心,不被外界所干扰。最后的最后是为了能开心快乐,真实无所畏惧的生活着。

发表评论

电子邮件地址不会被公开。 必填项已用*标注