数据结构
我不叫小海南
这个作者很懒,什么都没留下…
展开
-
线性表之顺序存储
线性表: 是具有相同特性的数据元素组成的一个有限序列。例如使用一个线性表来存取学生的学号,可表示成(1,2,3,4,5,6,7,8,9,10)线性表的存储结构分为顺序存储和链式存储。线性顺序存储 c/c++程序中的数组或字符串结构就是一种典型的线性表应用,特性是使用连续的存储空间来存储数据,在编译时就需要为相关变量分配内存,原创 2017-07-10 19:15:49 · 400 阅读 · 0 评论 -
二叉搜索树和平衡二叉搜索树应用
1、树的基本术语(1) 结点的度:树中一个结点的子节点个数称为结点的度 (2)树的度:树中结点的最大度数称为树的度 (3)分支结点:度大于0的结点(又称为非终端结点) (4)叶子结点:度等于0(没有子女结点)的结点称为叶子结点。 (5)结点的层次:从树根开始定义,根结点为第一层 (有的也把根结点当为第0层) (6)结点的深度:是从根节点开始自顶向下逐层累加的 (7)结点的高度:从根节点开始自底向上...原创 2018-06-13 17:06:40 · 516 阅读 · 0 评论 -
线性表之栈的链式存储实现
栈的链式存储也称为链栈,和链表的存储原理一样,都可以通闲散空间来存储元素,用指针来建立各节点之间的逻辑关系。同顺序栈,链表的插入,删除操作也只能在栈顶进行。链栈的C语言实现:(codeblocks完美运行)#include #include typedef struct Node{ int data; //数据域原创 2017-07-10 20:14:14 · 283 阅读 · 0 评论 -
线性表之链式存储
线性表的链式存储 c/c++程序的链表是以指针变量来实现线性表的数据结构,特性是使用不连续的存储空间来存储数据,内存分配是在执行时才会发生,不需要实现声明,这种分配方式称为动态内存分配。优点:①因为是使用时才分配内存,所以不会造成储存空间的浪费 ②由于地址空间不连续,在进行插入和删除操作时不需要移动其他数据的地址,只需修改指针指向的位置。因此插原创 2017-07-10 19:23:40 · 201 阅读 · 0 评论 -
循环队列
为了解决顺序队列中的“假溢出”现象,充分利用数组的存储空间,可将顺序队列的头尾相连,构成一个循环队列。循环队列一般都是用数组来实现的。在循环队列中,front和rear都是可以移动的。当队列为空或满时,front = rear都成立,所以不能用这个条件来判断队列是空的还是满的。为了解决这个问题,在循环队列中有一个约定:少用一个元素空间,当队尾标识rear原创 2017-07-10 20:25:37 · 949 阅读 · 0 评论 -
链式队列
用链表来实现的队列为链式队列。用指针front和rear分别指向队头和队尾。同顺序队列一样,也是在front处出队,在rear处入队。与顺序队列不同,链式队列的rear指针指向最后一个元素。链式队列的C语言实现:(codeblocks完美运行)#include #include typedef struct node{ int data;原创 2017-07-10 20:23:58 · 469 阅读 · 0 评论 -
顺序队列
队列就像日常生活中的排队买票一样,新来的要排到队伍的末尾,在队头的买完票就可以出队。先来的先离开,后来的后离开,所以队列也叫先进先出表(FIFO)队列和栈一样,也是一种受限制的线性表。队列只允许在队列头进行退出,在队列尾进行插入。向队列中插入元素称为入队,删除元素称为出队。队列中会有一个指向队头的指针称为对头指针,有一个指向队尾的指针称为队尾指针。出队操作:当有元素出队原创 2017-07-10 20:18:49 · 284 阅读 · 0 评论 -
线性表之栈的顺序存储实现
栈是一种受限制的线性表,说其受限制是因为它的插入和删除只能在栈顶操作。栈的特性是后进先出,所以也将栈称为后进先出(LIFO)表。 栈的顺序存储也称为线性栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的元素。用栈顶指针top来标识栈顶元素在顺序栈中的位置。栈的结构体表示:typedef struct { int dat原创 2017-07-10 19:47:23 · 274 阅读 · 0 评论 -
双向循环链表的简单实现
双向循环链表:双向循环链表和双向链表的不同之处,是双向循环链表的尾部节点的next不指向NULL,而是指向第一个节点,而第一个节点的pre是指向尾部节点的。双向循环链表的结构:(以下示意图均摘自来源: http://blog.csdn.net/fisherwan/ar)双向循环链表的初始化:链表中只有一个节点,原创 2017-07-10 19:40:38 · 2484 阅读 · 0 评论 -
双向链表的简单实现
双向链表:双向链表和单向链表的不同之处是它的指针域有指向前驱的指针pre和指向后驱的指针next。typedef struct double_list{ int date; struct double_list *pre; struct double_list *next;}list;双向链表的构成:(以下示意图均摘自来原创 2017-07-10 19:35:21 · 1602 阅读 · 1 评论 -
单向循环链表的简单实现
单向循环链表: 在单向链表中,头指针是相当重要的,因为单向链表的操作都需要头指针,所以如果头指针丢失或者破坏,那么整个链表都会遗失,并且浪费链表内存空间。单向循环链表的构成: 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表。单向链表结构图示:(以下示意图均摘自来源: http://blo原创 2017-07-10 19:31:14 · 25274 阅读 · 8 评论 -
单链表的简单实现
单向链表:单向链表中的每一个节点都有一个存储数据的数据域,和一个指向下一个元素内存地址的指针域一个简单结点用结构体表示为: struct single_list { int data; //数据成员可以是多个不同类型的数据 struct note *next; //原创 2017-07-10 19:25:26 · 490 阅读 · 0 评论 -
递归详解(斐波拉契和汉诺塔应用)
1、什么是递归递归是一种特殊的算法,简单来说,程序中的函数不仅仅是被其他函数调用,也可以被自己本身调用,一个函数调用自己就是所谓的“递归”。任何可以用选择结构和循环结构来编写的程序代码,都可以用递归编写。2、递归的条件(1)可以反复执行的递归过程(2)有一个跳出递归过程的条件,也就是不能无限递归。举一个简单的例子,数学中的阶乘我们可以用递归的思想去解决。3的阶乘我们可以表示3!原创 2017-06-23 12:54:34 · 732 阅读 · 0 评论 -
时间复杂度和空间复杂度详解
算法的复杂度分为时间复杂度和空间复杂度1、时间复杂度 表示为总的执行次数T(n)是关于问题规模n的函数,也就是T(n)随着n的变化,用一个函数表示为: T(n) = O(f(n))所以我们说到算法的时间复杂度原创 2017-06-21 21:37:10 · 484 阅读 · 0 评论 -
类模板与模板类
类模板:就是设计类的一种框架,可以适用于不同的数据类型,是类的抽象。利用类模板可以针对不同的数据类型定义出具有共性的一组类。定义:template class 类模板名{类模板定义;};其中类型参数列表与函数模板形式相同,如定义类模板时应注意以下几点:①要是用关键字template②类型形参列表可以包含抽象的形式类型,也可以是基本数据类型,但至少有一个参原创 2017-06-11 15:27:07 · 799 阅读 · 0 评论