数据结构
freekwy
这个作者很懒,什么都没留下…
展开
-
数据结构——循环队列
循环队列的初始化,队空,队满,遍历,入队,出队操作#include<stdio.h>#include<stdbool.h>#include<stdlib.h>typedef struct Queue{ int *pBase; int front; int rear;}QUEUE,* PQUEUE;void init_...转载 2020-04-08 00:08:29 · 216 阅读 · 0 评论 -
数据结构——栈
栈的基本操作:初始化栈,进栈,出栈,清空栈,判断栈空。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef struct Node{ int data; struct Node* next;}NODE,*PNODE;typedef struct Stack{...转载 2020-04-07 21:55:31 · 109 阅读 · 0 评论 -
数据结构——单链表
对链表的基本操作:创建,遍历,求长度,插入,删除,排序#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef struct Node{ int data; struct Node *pNext;}NODE,*PNODE;PNODE create_list();...转载 2020-04-06 22:35:38 · 296 阅读 · 0 评论 -
数据结构——图的基本概念
图看起来就像下图这样:在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。注意:顶点有时也称为节点或者交点,边有时也称为链接。一个图可以表示一个社交网络,每一个人就是一个顶点,互相认识的人之间通过边联系。图有各种形状和大小。边可以有权重(weight),即每一条边会被分配一个正数或者负数值...转载 2020-03-28 22:28:27 · 767 阅读 · 0 评论 -
数据结构——二叉树(五)红黑树,哈夫曼树
七:红黑树二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。下图中这棵树,就是一颗典型的二叉查找树:1.查看根节点9:...转载 2020-03-28 16:16:00 · 1120 阅读 · 0 评论 -
数据结构——二叉树(四)
五:B树首先补充一点,"B-树"就是“B树”,它们都是B-Tree的翻译,里面不是减号-,是连接符-。因为有人把B-Tree读成"B-树",让人误以为“B树”和"B-树"是两种树,实际上两者都是同一种树。还有,大家在读的时候千万不要读成“B减树”,读成“B树”就行了,不然就外行了。下面开始今天正文,我们依然从数据库的检索开始,我们知道数据库的索引是使用树结构来实现的,是因为树的查询效率高,...转载 2020-03-28 15:16:47 · 216 阅读 · 0 评论 -
数据结构——二叉树(三)
三:2-3树2-3 树作为一种平衡查找树,查询效率比普通的二叉排序树要稳定许多。但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。2-3树:满足二分搜索树的基本性质,是一颗绝对平衡的树,节点可以存放一个或两个元素,每个节点有2个或3个孩子。如下图所示都是2-3树,左边是节点存放了一个元素,右边是节点存...转载 2020-03-28 13:45:40 · 226 阅读 · 0 评论 -
数据结构——二叉树(二)
一:二叉搜索树平衡二叉树是在二叉排序树的基础上发展而来的,那为什么要引入二叉搜索树呢?所谓二叉搜索树(Binary Search Tree),又叫二叉排序树,简单而言就是左子树上所有节点的值均小于根节点的值,而右子树上所有结点的值均大于根节点的值,左小右大,并不是乱序,因此得名二叉排序树。一个新事物不能凭空产生,那二叉搜索树又有什么用呢?有了二叉搜索树,当你要查找一个值,就不需要遍...转载 2020-03-28 13:11:55 · 788 阅读 · 0 评论 -
数据结构——二叉树(一)
一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树。1 重点概念1.1 结点概念结点是数据结构中的基础,是构成复杂数据结构的基本组成单位。1.2 树结点声明本系列文章中提及的结点专指树的结点。2 树2.1 定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特...转载 2020-03-28 00:24:38 · 398 阅读 · 0 评论 -
数据结构——计数排序
01 计数排序算法概念计数排序不是一个比较排序算法,该算法于1954年由 Harold H. Seward提出,通过计数将时间复杂度降到了O(N)。02 基础版算法步骤第一步:找出原数组中元素值最大的,记为max。第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出...转载 2020-03-27 20:04:44 · 174 阅读 · 0 评论 -
数据结构——堆排序
堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序。一 准备知识堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆1.1大根堆和小根堆性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。如下图...转载 2020-03-26 23:08:26 · 1617 阅读 · 0 评论 -
数据结构——希尔排序
#include<stdio.h>int main(){ void shell_sort(int a[]); int i,a[6]={5,1,3,8,2,4}; shell_sort(a); for(i=0;i<6;i++){ printf("%5d",a[i]); } printf("\n"); return 0;}void shell_sort...转载 2020-03-18 21:07:27 · 185 阅读 · 0 评论 -
数据结构——快速排序
#include<stdio.h>int main(){ void quick_sort(int s[],int l,int r); int i,j,temp,a[6]={5,1,3,8,2,4}; quick_sort(a,0,5); for(i=0;i<6;i++){ printf("%5d",a[i]); } printf("\n"); return ...转载 2020-03-18 20:00:48 · 185 阅读 · 0 评论 -
数据结构——冒泡排序
#include<stdio.h>int main(){ int i,j,temp,a[6]={1,5,3,8,2,4}; for(i=0;i<5;i++){ for(j=0;j<5;j++){ //记录轮数 if(a[j]>a[j+1]){ //逐轮比较 temp=a[j]; a[j]=a[j+1]; a[j+1]=temp...转载 2020-03-18 11:06:36 · 103 阅读 · 0 评论 -
数据结构——简单选择排序
#include<stdio.h>int main(){ int i,j,temp,a[6]={1,5,3,8,2,4}; for(i=0;i<5;i++){ for(j=i+1;j<6;j++){ if(a[i]>a[j]){ temp=a[i]; a[i]=a[j]; a[j]=temp; } } } for...转载 2020-03-18 10:49:41 · 79 阅读 · 0 评论 -
数据结构——直接插入排序
#include<stdio.h>int main(){ int i,j,temp,arr[6]={1,5,3,8,2,4}; for(i=1;i<6;i++){ j=i; while(j>0&&arr[j]<arr[j-1]){ //不断向前比较 temp=arr[j]; arr[j]=arr[j-1]; arr[...转载 2020-03-18 10:35:33 · 126 阅读 · 0 评论