Skip to content

NGLHarry/DataStruct_CPlusPlus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DataStruct_CPlusPlus

数据结构与算法之美

极客时间:https://time.geekbang.org/column/intro/100017301?tab=catalog \

Java及各版本 github地址:https://github.com/wangzheng0822/algo

目的

本仓库跟随极客时间王争老师的《数据结构与算法之美》课程进行相关数据结构的学习与代码实践

环境

windows 10 系统自带WSL linux子系统 gcc 版本 gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)

目录

  • 数组 数组空间的申请、数据的增加、删除、查找、打印等功能

  • 链表 单链表中元素的增加、删除、查找、翻转、获取中位数等功能 通过双指针策略,实现了通过出参返回插入元素地址 意识到二级指针在链表中的重要意义:有效地利用二级指针,将其作为管理和操作链表的首要选项,并在博客:https://www.cnblogs.com/whiteBear/p/16183348.html 进行了相应的补充

双向链表:插入元素(头插法)、删除元素(尾删、指定节点删)、遍历链表、LRU(最近最少使用)缓存算法等双链表实现

链表相关的算法: 0) 遍历单链表

  1. 单链表反转
  2. 链表中环的检测
  3. 两个有序的链表合并
  4. 删除链表倒数第n个结点
  5. 求链表的中间结点 涉及C++中模板(template)using关键字(定义类型别名)make_shared初始化
  • 栈 分别通过数组、链表两种实现方式,实现了栈的初始化、入栈、出栈、获取栈大小等功能

  • 队列 基于数组、链表的队列,循环队列,阻塞队列、并发队列

阻塞队列,在多线程情况下,会有多个线程同时操作队列,会存在线程安全的问题,因此需要实现一个线程安全的队列--并发队列 并发队列最简单的实现方法就是:直接在 enqueue()、dequeue() 方法上加锁,但是锁粒度大并发度会比较低,同一时刻仅允许一个存或者取操作。实际上,基于数组的循环队列,利用CAS(Compare and Swap)原子操作,可以实现非常高效的并发队列。这也是循环队列比链式队列应用更加广泛的原因。

  • 递归 递归需要满足三个条件: 1)一个问题的解可以分解为几个子问题的解 2)这个问题与分解后的子问题,除了数据规模不同,求解思路完全一样 3)存在递归终止条件 写递归代码最关键的是写出递推公式,找到终止条件

  • 排序 O(n^2) 冒泡排序、插入排除、选择排序、希尔排序(时间复杂度为均为O(n^2),属于原地排序,但冒泡排序和插入排序属于稳定排序) O(nlog(n))、不稳定 快速排序、归并排序 O(n)、稳定的 计数排序、桶排序、

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published