自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 二叉树基础

树(tree)树是一种数据结构,不同于栈、队列等线性表结构,树是一种非线性表结构。在树这种数据结构中,元素叫做“节点”,用来连接相邻节点之间的关系叫做“父子关系”。如下图所示,A节点是B节点的父节点,B节点是A节点的子节点。B、C、D这三节点父节点相同,所以它们互称兄弟节点。E没有父节点,叫做根节点。没有子节点的节点叫做叶节点/叶子节点,如G节点就是叶节点。关于“树”,还有三个比较相似的概念:高度(height)、深度(depth)、层(level)。下面是相关定义:高度和深度看的.

2021-09-25 15:49:21 406

原创 哈希表(hash table)

基本概念哈希表是一种数据结构。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。哈希表的索引并不像普通数组的索引那样,从0到length-1,而是由关键字(key)即数据本身通过哈希函数(hash function)得到。我们把键(key)或者关键字转化为数组下标的映射方法就叫作哈希函数,而哈希函数计算得到的值就叫作哈希值。哈希函数哈希函数可以定义为hash(key),其中key表示元素的键值,关键字(key)通过哈希函数得到哈希值也.

2021-09-24 16:31:36 387

原创 C++常见的二分查找变形问题

变体一:查找第一个值等于给定值的元素有序数据集合中存在重复的数据,我们希望找到第一个值等于给定值的数据。比如下面这样一个有序数组,其中,有四个元素的值都等于 8,是重复的数据。我们希望查找第一个等于 8 的数据。#include<iostream>using namespace std;int main() { int arr[] = { 1,2,3,4,5,6,7,8,8,8,8,9,10,13,15,17,19 }; int num = sizeof(arr) / siz

2021-09-19 18:21:21 311

原创 C++二分查找

递归法:#include<iostream>using namespace std;int binarySearch(int arr[], int low, int high,int target){ if (low <= high) { int mid = (low + high) / 2; if (target == arr[mid]) return mid; else if(target<arr[mid]) return binary..

2021-09-19 11:43:41 112

原创 C++快速排序(quicksort)

#include<iostream>using namespace std;void swap(int& a, int& b){ int temp; temp = a; a = b; b = temp;}void quickSort(int arr[], int low, int high){ if (low < high) { int pivot = arr[high]; int i= low,j=low; while ...

2021-09-18 12:19:22 234

原创 C++归并排序(merge sort)

归并排序的核心思想:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思想。将一个大问题分解成小的子问题来解决,而子问题的解决方法和原问题是相同的。所以分治算法一般都是用递归来实现的。分治是一种解决问题的处理思想,而递归是一种编程技巧。#include<iostream>using namespace std;void merge(int arr[], int low,.

2021-09-17 12:13:34 1300

原创 C++递归

基础知识递归函数即自调用函数,在函数内部直接的或者间接地调用自己。递归采用了分治的思想,将整体分割成部分,从最小的基本部分入手,逐一解决,其中部分通常和整体具有相同的结构,这样部分可以继续分割,直到最后分割成基本部分。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口(在问题的规模极小时必须用直接给出解答而不再进行递归调用)。相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出

2021-09-14 21:37:23 300

原创 C++插入排序(insertion sort)

#include<iostream>using namespace std;void createArray(int* arr, int &n){ cout << "Please enter the number of the array: "; cin >> n; cout << "Please enter the elements of the array: "; for (int i = 0;i < n; i++) {.

2021-09-12 18:24:03 207

原创 C++冒泡排序

#include<iostream>using namespace std;void createArray(int* arr,int n){ for (int i = 0;i < n;i++) { cin >> arr[i]; }}void bubbleSort(int* arr, int n){ for (int i = 0;i < n - 1;i++) { bool swap = false; for (int j = 0;j.

2021-09-10 17:30:21 86

原创 C++顺序队列(queue)

基础知识队列的特点:先进先出,不许插队。两个基本操作:入队enqueue(),放一个数据到队列尾部。 出队dequeue(),从队列头部取出一个元素。队列和栈一样,也是一种操作受限的线性表数据结构。用数组实现的队列叫顺序队列。 用链表实现的队列叫链式队列。对栈来说,我们需要一个栈顶指针就可以了。当时队列需要两个指针:一个是head指针,指向队头,一个是tail指针,指向队尾。进行入队操作时,tail往后移动,执行出队操作时,head往后移动。如下图所示,当a、b、c、d依次入队之

2021-09-07 17:00:21 2782 2

原创 C++顺序栈

基础知识栈的基本操作#include<iostream>const int maxsize = 100;using namespace std;typedef int sElemType;//顺序栈的储存结构struct sqStack { sElemType* base; sElemType* top; int stackSize;};//初始化void initStack(sqStack& s){ s.base = new sElemTy

2021-09-05 21:47:16 1132 2

原创 C++链表(linked list)

基础知识链表也是一种线性表。链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。插入、删除数据效率O(1)级别(只需更改指针指向即可),随机访问效率O(n)级别(需要从链头至链尾进行遍历)。此外和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储指针。常用链表: 单链表:每个节点只包含一个指针,即后继指针。首节点地址表示整条链表,尾节点的后继指针指向空地址null 循环链表:除了尾节点的后继指针指向首节点的...

2021-08-31 16:52:18 2130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除