-
【数据结构】——排序算法——1.2、希尔shell排序
所属栏目:[安全] 日期:2020-12-15 热度:52
【数据结构】——排序算法——1.2、希尔shell排序 一、先上维基的图:希尔排序wiki 图一、插入排序的例子 分类 排序算法 数据结构 数组 最差时间复杂度 根据步长序列的不同而不同。已知最好的: 最优时间复杂度 O( n ) 平均时间复杂度 根据步长序列的不同而[详细]
-
【数据结构】——排序算法——2.1、冒泡排序
所属栏目:[安全] 日期:2020-12-15 热度:65
【数据结构】——排序算法——2.1、冒泡排序 一、先上维基的图: 图一、冒泡排序 分类 排序算法 数据结构 数组 最差时间复杂度 最优时间复杂度 平均时间复杂度 最差空间复杂度 总共,需要辅助空间 二、描述 这个算法是最简单了解和实现的排序算法之一,每轮[详细]
-
【数据结构】——排序算法——2.2、快速排序
所属栏目:[安全] 日期:2020-12-15 热度:104
【数据结构】——排序算法——2.2、快速排序 一、先上维基的图: 图一、快速排序效果 图二、快速排序实例 分类 排序算法 数据结构 不定 最差时间复杂度 最优时间复杂度 平均时间复杂度 最差空间复杂度 根据实现的方式不同而不同 二、描述 快速排序使用 分治[详细]
-
【数据结构】二叉树的一个应用,哈夫曼编码的生成
所属栏目:[安全] 日期:2020-12-15 热度:153
1.哈夫曼树只有结点为0.或者结点为2的值。所以如果叶子结点为n的话,那么整个哈夫曼树的所有结点个数为2n-1;因为结点为2的结点个数n0=n2+1;所以总数n=n0+n2=2n0-1; 过程:1由已知的n个权值形成哈夫曼树的初态,即在数组ht[]的前n项中填入相应的权值。 2建立[详细]
-
【数据结构】查找-顺序查找
所属栏目:[安全] 日期:2020-12-15 热度:94
结构体类型 struct Rec { int k; } Rec[n+1],为了使得每个值对应的下标相同,所以设置大小为n+1,Rec[0]的内容接下来说明 一般利用倒序查找方法从最后一个值向前查找这样可以简化函数步骤 程序如下: #includestdio.h #includestdlib.h typedef int Datatype[详细]
-
严蔚敏《数据结构》书中错误纠正
所属栏目:[安全] 日期:2020-12-15 热度:119
图片中用红色突出的地方本人认为是不正确的。理由如下: 矩阵M的第一列中可能一个元素都没有,所以说cpot[1]=1是不合适的,不完全正确。 本人认为应当修改如下: int index=0;while(num[++index]==0); //找到第一个该列中存在非0元素的列数cpot[index]=1;//[详细]
-
【数据结构】图的构建(邻接表法)
所属栏目:[安全] 日期:2020-12-15 热度:119
最近整理电脑,发现了以前写的数据结构的代码,由于时间久了,好多代码都找不到了,现在扒出来复习一下。 如果看不懂下面关于图的术语或者压根就不知道图。建议看一下严蔚敏版的《数据结构》中对图的介绍 图的构建方法有好几种,如邻接矩阵法,邻接表法,十[详细]
-
【数据结构】遍历二叉树的四种方法
所属栏目:[安全] 日期:2020-12-15 热度:106
public class 二叉树遍历 {public static int MAXSIZE = 100;public static Node queue[] = new Node[MAXSIZE];public static void main(String[] args) {Node h = new Node('H',null,null);Node i = new Node('I',null);Node f = new Node('F',h,i);Node g[详细]
-
【数据结构】——排序算法——3.1、选择排序
所属栏目:[安全] 日期:2020-12-15 热度:177
【数据结构】——排序算法——3.1、选择排序 一、先上维基的图: 分类 排序算法 数据结构 数组 最差时间复杂度 О(n2) 最优时间复杂度 О(n2) 平均时间复杂度 О(n2) 最差空间复杂度 О(n) total, O(1) auxiliary 二、描述: 选择算法算是最直观的一个了。每[详细]
-
《数据结构》线性表的顺序表示和实现
所属栏目:[安全] 日期:2020-12-15 热度:82
顺序表的插入算法 statusListInsert(List*L,inti,ElemTypee){structSTU*p,*q;if(i1||iL-length+1)returnERROR;q=(L-elem[i-1]);for(p=L-elem[L-length-1];p=q;--p)*(p+1)=*p;*q=e;++L-length;returnOK;}/*ListInsertBeforei*/ 顺序表的合并算法 voidMergeLis[详细]
-
【数据结构】回顾表ADT
所属栏目:[安全] 日期:2020-12-15 热度:172
1.对于表的所有操作来说,都可以使用数组来实现,而且数组虽然是静态分配的,但内部存储数组的vector类却允许在需要时将数组的大小增加一倍。 2.正是因为数组的实现,使得printList以线性时间来执行,而findkth甚至是通过常数时间。最不济的是插入和删除了,[详细]
-
【数据结构】回顾栈ADT和队ADT
所属栏目:[安全] 日期:2020-12-15 热度:101
1.简单的说,栈就是只在一个位置上进行插入和删除操作的表,而这个特殊的位置就是表的末端,但这却不被成为栈的末端,而是顶(Top)。 2.栈的基本操作时进栈和出栈,英文名分别是push和pop,分别相当于插入和删除。切记对空栈进行pop和top操作在栈ADT被认为[详细]
-
【数据结构】 栈实现 十进制到八进制的转化
所属栏目:[安全] 日期:2020-12-15 热度:173
1.利用栈的基本操作 代码实现如下 #ifndef _SEQSTACK_H#define _SEQSTACK_H#includeiostream#includeassert.husing namespace std;typedef int ElemType;#define STACK_INIT_SIZE 20typedef struct Stack{ ElemType *base; int top; int capacity;}Stack;voi[详细]
-
【数据结构】栈的应用 括号匹配
所属栏目:[安全] 日期:2020-12-15 热度:56
括号配对问题: 假设一个表达式中包含三种类型的括号:(),{ },【】,嵌套顺序任意 { 【()()】 } 1 2 3 4 5 6 7 8 引入“期待的急迫程度”概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 【 时,此时【最期待和第七个[详细]
-
【数据结构】栈应用 行编辑器
所属栏目:[安全] 日期:2020-12-15 热度:176
在终端输入一串字符 当发现刚刚输入的字符有误,可以输入 # ,表示前一个字符无效;当想清除该行 则输入 @ 例如: ` 输入: hellow # 输出: hello 输入: hellow @ 输出: #ifndef _EDIT_H_#define_EDIT_H_#include iostream #include stdlib.h #include ma[详细]
-
【数据结构】回顾表、栈、队列
所属栏目:[安全] 日期:2020-12-15 热度:94
1.如何通过调整链而不是数据来交换两个相邻的元素? // 单向链表 Node * p, * afterp; p = beforep - next; afterp = p - next; p - next = afterp - next; beforep - next = afterp; afterp - next = p; // 双向链表 Node * beforep, * afterp; beforep = p[详细]
-
【数据结构】回顾二叉树
所属栏目:[安全] 日期:2020-12-15 热度:174
1.为什么会有树?因为当有大量的输入数据时,链表的线性访问时间就显得略长了。而树结构,其大部分操作的运行时间平均为O(logN)。 2.树的实现并不难,几行代码就搞定了。 struct TreeNode{ Object element; TreeNode *firstChild; TreeNode *nextSibling;} 3[详细]
-
【数据结构】回顾散列表
所属栏目:[安全] 日期:2020-12-15 热度:128
1.散列表(hash table)的实现成为散列(hashing),是一种以常数平均时间执行输入、删除和查找的技术。但是那些需要元素间任何排序信息的数操作将不会得到有效的支持。 2.散列函数示例 int hash (const string key,int tableSize){ int hash Val= 0 ; for ([详细]
-
【数据结构】回顾优先队列(堆)
所属栏目:[安全] 日期:2020-12-15 热度:197
1.优先队列有两项基本操作:插入(insert)和删除最小项(deleteMin),后者的工作是找出、返回和删除优先队列中最小的元素。而insert操作则等价于enqueue(入队),deleteMin则等价于dequeue(出队)。补充:C++提供2个版本的deleteMin,一个删除最小项,另[详细]
-
【数据结构】堆heap,Trie树,位图Bitmap
所属栏目:[安全] 日期:2020-12-15 热度:93
本节研究堆heap、Trie树、位图Bitmap的实现; 堆 说明几点 (1)堆分为大根堆和小根堆;大根堆的根为最大值,每一个节点的值都不小于其孩子的值; (2)可以利用大根堆实现升序排序;主要是利用大根堆的头和需要排序的最后一个数字交换的思想; (3)使用大[详细]
-
【数据结构】哈夫曼树
所属栏目:[安全] 日期:2020-12-15 热度:135
哈夫曼树,又称最优二叉树,它有着广泛的应用,尤其在数据压缩上;使用哈夫曼树的编码原理又称哈夫曼编码; 哈夫曼树性质 (1)路径长度:路径上的分支数目; (2)树的路径长度:树根到每一个结点的路径长度之和; (3)树的带权路径长度:树中所有叶子结点[详细]
-
【数据结构】动态数组,数组链表,双向链表
所属栏目:[安全] 日期:2020-12-15 热度:56
本节介绍Nginx中的动态数组,数组链表,以及双向链表; 动态数组 说明几点 (1)Nginx中数组和STL中的vector类似,当达到数组的已分配内存的上限时,会自动扩充数组的大小; (2)数组只支持添加,不支持删除; 动态数组结构体声明 typedef struct { void *e[详细]
-
【数据结构】实现顺序表(c++)
所属栏目:[安全] 日期:2020-12-15 热度:166
头文件: #pragma once#include iostreamusing namespace std;template class Typeclass SeqList{public:SeqList(size_t sz = INIT_SIZE);~SeqList();public:bool isfull()const{return size capacity;}bool isempty()const{return size == 0;}public:void s[详细]
-
【数据结构】用C++实现顺序表的各种操作(包括头删,尾删,插入
所属栏目:[安全] 日期:2020-12-15 热度:164
//顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)//头文件#pragma once#include iostreamusing namespace std;templateclass Typeclass SeqList{public:SeqList(size_t sz = INIT_SIZE);~SeqList();public:bool isfull() const{return siz[详细]
-
【数据结构】实现顺序表(c语言)
所属栏目:[安全] 日期:2020-12-15 热度:110
头文件: #ifndef _SEQLIST_H#define _SEQLIST_H#include stdio.h#define INIT_SIZE 8typedef struct SeqList{int *base;size_t size;size_t capacity;}SeqList;// 要实现的函数void InitList(SeqList *list);int isfull(SeqList *list);int isempty(SeqList[详细]