数据结构与算法
撰沓乾
这个作者很懒,什么都没留下…
展开
-
二叉树基础
树(tree)树是一种数据结构,不同于栈、队列等线性表结构,树是一种非线性表结构。在树这种数据结构中,元素叫做“节点”,用来连接相邻节点之间的关系叫做“父子关系”。如下图所示,A节点是B节点的父节点,B节点是A节点的子节点。B、C、D这三节点父节点相同,所以它们互称兄弟节点。E没有父节点,叫做根节点。没有子节点的节点叫做叶节点/叶子节点,如G节点就是叶节点。关于“树”,还有三个比较相似的概念:高度(height)、深度(depth)、层(level)。下面是相关定义:高度和深度看的.原创 2021-09-25 15:49:21 · 371 阅读 · 0 评论 -
哈希表(hash table)
基本概念哈希表是一种数据结构。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。哈希表的索引并不像普通数组的索引那样,从0到length-1,而是由关键字(key)即数据本身通过哈希函数(hash function)得到。我们把键(key)或者关键字转化为数组下标的映射方法就叫作哈希函数,而哈希函数计算得到的值就叫作哈希值。哈希函数哈希函数可以定义为hash(key),其中key表示元素的键值,关键字(key)通过哈希函数得到哈希值也.原创 2021-09-24 16:31:36 · 365 阅读 · 0 评论 -
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 · 100 阅读 · 0 评论 -
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 · 219 阅读 · 0 评论 -
C++归并排序(merge sort)
归并排序的核心思想:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思想。将一个大问题分解成小的子问题来解决,而子问题的解决方法和原问题是相同的。所以分治算法一般都是用递归来实现的。分治是一种解决问题的处理思想,而递归是一种编程技巧。#include<iostream>using namespace std;void merge(int arr[], int low,.原创 2021-09-17 12:13:34 · 1251 阅读 · 0 评论 -
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 · 175 阅读 · 0 评论 -
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 · 81 阅读 · 0 评论 -
C++顺序队列(queue)
基础知识队列的特点:先进先出,不许插队。两个基本操作:入队enqueue(),放一个数据到队列尾部。 出队dequeue(),从队列头部取出一个元素。队列和栈一样,也是一种操作受限的线性表数据结构。用数组实现的队列叫顺序队列。 用链表实现的队列叫链式队列。对栈来说,我们需要一个栈顶指针就可以了。当时队列需要两个指针:一个是head指针,指向队头,一个是tail指针,指向队尾。进行入队操作时,tail往后移动,执行出队操作时,head往后移动。如下图所示,当a、b、c、d依次入队之原创 2021-09-07 17:00:21 · 2641 阅读 · 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 · 888 阅读 · 2 评论 -
C++链表(linked list)
基础知识链表也是一种线性表。链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。插入、删除数据效率O(1)级别(只需更改指针指向即可),随机访问效率O(n)级别(需要从链头至链尾进行遍历)。此外和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储指针。常用链表: 单链表:每个节点只包含一个指针,即后继指针。首节点地址表示整条链表,尾节点的后继指针指向空地址null 循环链表:除了尾节点的后继指针指向首节点的...原创 2021-08-31 16:52:18 · 1823 阅读 · 0 评论