数据结构
大话数据结构读书笔记
kongslly
码海求知,只因迷惑.IT的世界博大精深,不是因为不会,而是因为根本不懂
echo H4sIAIWNIV4AA92VwQ7CMAxD7/sKpP3/P3JAqMmznRW0AyISqCqNZzvuOM+76rgN6dehHq1eO/V77buzgFr4vUVb3VlA1aNs0zVhI5QDrtI/gqrH3r9us+rr6li3/tIrtTZ/xgmyOD1y1TpS63JHR6FeCiv1gTF1u1GgmtvnqAqswBRMlUxwsGJuuO5DYNYARd86PEUNXvU89fRwJDVhAaof4SrbANuTawTWRworNlOaenXxZqisKMUlbcOr+lyNo
展开
-
list.h链表使用
1.头文件 您给对方发送了一个闪屏振动。hello 14:43:59#include <unistd.h>#include <string.h>#include <time.h>#include <stdio.h>#include <stdlib.h>#include原创 2018-08-30 16:02:55 · 3930 阅读 · 0 评论 -
折半排序
一、简介希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序是基于插入排序的原创 2017-06-24 12:24:14 · 1726 阅读 · 0 评论 -
选择排序
一、定义:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面。二、算法:在待排数据中取出首个待排字符位置k,依次向后原创 2017-06-24 12:22:48 · 612 阅读 · 0 评论 -
快速排序
一、简介快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、算法设要排序的数组是A[0]……A[N原创 2017-06-24 12:20:36 · 668 阅读 · 0 评论 -
栈的链式存储结构
栈的链式存储简称链栈。在链栈中将链表的头指针和栈顶指针合二为一。 对于链栈来说基本不存在栈满的情况,除非内存以及没有可用空间。对于空栈来说链表原定义是头指针指向空,那么链栈的空其实就是top==NULL的时候。一、结构typedef int SElemType;//此处可能是个结构体,练习使用int型足够了 typedef struct stacknode{原创 2017-06-24 12:17:14 · 1137 阅读 · 0 评论 -
两栈共享空间
两栈共享空间栈的顺序存储只准在栈顶进出元素操作,使用起来还是很方便的,不存在线性表插入和删除时需要移动元素的问题,不足之处是必须事先确定数组空间大小。两栈共享空间是对于两个相同类型的栈做法就是事先分配一块数组空间两个栈共同使用。实现方法:数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度n-1处,这样两个栈如果增加元素,就是原创 2017-05-31 23:56:32 · 1085 阅读 · 1 评论 -
栈的顺序存储结构
栈的顺序存储是将数组下标为0的一端作为栈底。 一、结构#define MAXSIZE 20//存储空间初始化分配量typedef int SElemType;//此处可能是个结构体,练习使用int型足够了typedef struct{ SElemType data[MAXSIZE];//数组存储数据元素,最大存储量MAXSIZE int top原创 2017-05-31 23:52:25 · 861 阅读 · 0 评论 -
栈
定义栈(stack):是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In Fist Out)的线性表,简称LIFO。注意:1.栈是一个线性表,一种特殊的线性表,栈元素具备线性关系,也就是前驱和后继的关系。定义中规定了只能在线性表的表尾进行删除和插入操作,在原创 2017-04-16 20:22:24 · 743 阅读 · 0 评论 -
双向链表
一、解析在单链表中,有了next指针,要查找下一节点的时间复杂度为O(1),如果要查找的是上一节点的话,最坏的时间复杂度是O(n)了,以为每次都要从头开始查找。为了克服这个缺点引入了双链表设计:双链表(doublelinked list):是在单链表的每个节点中,在设置一个指向其前驱节点的指针域。双链表有两个指针域,一个指向直接前驱,一个指向直接后继。 /*线性表的双向链表存储结构原创 2017-04-08 22:30:30 · 867 阅读 · 1 评论 -
循环链表
一、解析将单链表中终端结点的指针端由空指针改为指向头结点,就使整个链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表(circular linked list)。循环链表解决了一个很麻烦的问题,就是如何从当中任意一个结点除非,访问到链表的全部结点。为了使空链表与非空链表处理一致,我们通常设一个头结点,当然,这并不是说,循环链表一定要头结点。其实循环链表和单链表的主要差原创 2017-04-03 10:48:07 · 869 阅读 · 0 评论 -
静态链表
一、解析我们把这种用数组描述的链表叫做静态链表,又称游标实现法。实现方法:首先让数组的元素都是有两个数据域组成,data和cur。也就是说,数组的每个下标都对应一个data和一个cur。数据域data,用来存放数据元素,也就是通常我们要处理的数;而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。 对于数组的第一个和最后一个元素作为特殊元素处理,不存数据。原创 2017-04-03 10:39:00 · 2757 阅读 · 2 评论 -
线性表的链式存储结构
一、解析线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着,这些数据元素可以存在内存未被占用的任意位置。在顺序结构中,每个数据元素只需要存数据元素信息就可以了。现在链式结构中,除了要存数据元素信息外,还要存储他的后继元素的存储地址。为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对原创 2017-03-26 17:42:01 · 2178 阅读 · 0 评论 -
线性表顺序存储结构
线性表顺序存储结构顺序存储结构:指的是用一段地址连续的存储单元一次存储线性表的数据元素。(理解成一维数组,既把第一个数据元素存到数组下表为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置)。 一、结构#define MAXSIZE 20//存储空间初始化分配量typedefintElemType;//此处可能是个结构体,练习使用int型足够了typedefstruct原创 2017-03-26 17:34:31 · 734 阅读 · 0 评论 -
线性表
线性表:零个或多个数据元素的有限序列。特点:是一个序列:元素之间是有序的,第一个无前驱,最后一个无后继,其余的元素则有且只能有一个唯一的前驱和唯一的后继。数据元素是有限的。数学模型:一组数据(a1,a2,a3,……,ai-1,ai,ai+1,……,an),则ai-1是ai的前驱,反之ai是ai-1的后继。线性表元素的个数n(n>=0)定义为线性表的长度,当n=0原创 2017-03-26 17:28:42 · 613 阅读 · 0 评论 -
数据结构绪论
一、定义数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。程序设计 = 数据结构 + 算法二、历史1.1968年,每个高德纳(Donald E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统的阐述了数据的逻辑结构和存储结构及其操作,开创原创 2017-03-18 20:39:11 · 564 阅读 · 0 评论