![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
胡澳治
好好学习,不断进步
展开
-
简单解决八皇后问题,详细
思路解决八皇后问题。声明一个长度为8 的一维数组,用来表示皇后Q的位置,index表示从0开始的行数,值代表列数。先写一个函数is_ok判断是否符合题意,即任意两个皇后不能在同一行同一列同一对角线上。八个皇后必然在8行里分别有一个,调整其列即可,约束简化为每行的皇后列数不能相同,行数差的绝对值与列数差的绝对值不能相等。从第一(index=0)行开始,用一个for循环尝试把当前行的皇后遍历列号,用is_ok判断放在此列是否符合题意,符合则继续放下一行的皇后,依次类推直到最后一行;不符合则换下一个列号原创 2021-03-12 20:44:02 · 222 阅读 · 0 评论 -
数据结构排序标准代码
#include <stdio.h>#include <stdlib.h>//冒泡排序,O(n2)void bubble_sort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j原创 2020-12-21 19:55:12 · 337 阅读 · 0 评论 -
归并排序的递归和递推代码
归并排序递归版#include <stdio.h>void merge(int arr[], int left, int mid, int right, int t[]) { //merge()的前提时[left,mid-1]和[mid,right]都各自有序 for (int i = left; i <= right; i++) // 先把原数组[left,right]的数搬到t[] t[i] = arr[i]; int i = left, j = mid; int k原创 2020-12-04 10:50:37 · 468 阅读 · 0 评论 -
快速排序(老师讲的另一种版本)
#include<stdio.h>void swap(int a[], int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}void qsort(int a[], int left, int right) { if (left >= right) return; swap(a, left, (left + right) / 2); int last = left; for (int i = left +原创 2020-12-04 10:57:18 · 73 阅读 · 0 评论 -
堆排序(小根堆)C语言实现
#include <stdio.h>void swap(int a[], int b, int c) { int tmp = a[b]; a[b] = a[c]; a[c] = tmp;}void heapify(int a[], int i, int n) { if (i >= n) return; int c1 = 2 * i + 1; int c2 = 2 * i + 2; int min = i; if (c1 < n && a[c1原创 2020-12-04 10:58:15 · 1138 阅读 · 0 评论 -
BST&AVL
//** 二叉搜索树BST的元素删除**struct node { int val; node* left; node* right;};node* findMax(node* root) { if (root == nullptr) return nullptr; while (root->right) { root = root->right; } return root;}node* findMin(node* root) { if (root == nu原创 2020-12-04 10:58:30 · 67 阅读 · 0 评论 -
快速排序C++代码嗯嗯
这里有B站上的快排干货视频,看完来看这个代码很容易#include <iostream>using namespace std;int getmid(int a[], int l, int r) { int left = l, right = r; int p = a[left]; while (left < right) { while (left < right && a[right] >= p) right--; a[left]原创 2020-12-04 10:58:41 · 197 阅读 · 0 评论 -
哈夫曼树构造的代码实现嗯嗯
建议先学习哈夫曼树原理再来看该博客的代码实现相关概念叶子结点的权值:叶子结点的数值量,如某个字符出现的频率,修路的费用等二叉树的带权路径长度:设二叉树有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与该叶结点的权值乘积的和哈夫曼树:给定一组带权值的叶结点,带权路径长度最小的二叉树哈夫曼树构造过程对于n个带权叶结点,我们每次合并两个结点为一个,要经过n-1次合并我们才能合并成一棵哈夫曼树,而且这棵树有n-1个非叶结点,n个叶结点,一共有2*n-1个结点。其实细节很多,还是看代码把,读代码总原创 2020-12-04 11:07:18 · 412 阅读 · 0 评论