数据结构与算法
ABC我的博客
主要是自己平时回顾起来方便
工作忙没时间更新了,望理解
展开
-
数据结构与算法——数据结构相关的概念
2 数据结构相关的概念2.1 数据结构数据结构在特性相同的数据元素集合中,数据元素之间存在一种或多种特定的关系,则称该数据元素的集合为“数据结构”。结构:数据元素之间存在的关系。线性结构:一对一树形结构:一对多网状或图形结构:多对对线性结构条件:(1) 有且仅有一个根结点(2) 每个结点最对一个前件,也最多一个后件(3) 首结点无前件,尾结点无后件。2.2 存储结构(1)顺...原创 2019-02-27 21:56:42 · 213 阅读 · 0 评论 -
二分查找-查找算法-数据结构与算法
介绍二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列查找过程首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后...原创 2019-04-28 22:32:25 · 331 阅读 · 0 评论 -
AVL树和伸展树-二叉树-数据结构与算法
AVL树(高度平衡树)AVL树是高度平衡的二叉树。它的特点是:树中任何节点的两个子树的高度最大差别为1结构体定义:class AVLTreeNode{ public: T key; // 关键字(键值) int height; // 高度 AVLTreeNode *left; /...原创 2019-04-17 22:40:30 · 380 阅读 · 0 评论 -
二叉查找树-二叉树-数据结构与算法
C++ 语言: 二叉查找树二叉查找树(Binary Search Tree),又被称为二叉搜索树。它是特殊的二叉树:对于二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] < key[x];如果y是x的右子树的一个结点,则key[y] > key[x]。那么,这棵树就是二叉查找树。如...原创 2019-04-15 20:22:20 · 169 阅读 · 0 评论 -
数据结构与算法——栈的实现(数组,链表,STL实现)
概念:栈(stack)是限定只能在表的一段进行插入或删除操作的线性表。在表中允许插入和删除的一端称为“栈顶(top)”,不允许插入和删除的叫“栈底(bottom)”。用四种方式实现,要会手写代码,理解栈的底层实现,注意边界条件的考虑//数组实现栈(要手撕)//链表实现栈(先判断头指针是否为NULL。否则不能pHead->next)//STL实现栈操作//vector实现栈...原创 2019-03-23 16:37:58 · 527 阅读 · 0 评论 -
数据结构与算法——线性表—双向链表操作(含代码)
注意:这里的头指针是不包含数据的双向链表(double linked list)的结点中有两个指针域,一个指向“直接后继”,另一个指向“直接前驱”。typedef struct DLNode{ElemType data;DLNode *prior;DLNode *next;}DLNode,*DuLinkList;#include “DList.h”#pragma once#in...原创 2019-03-23 16:21:35 · 226 阅读 · 0 评论 -
数据结构与算法——排序算法—(5)归并排序
思想:将两个有序数列合并成一个有序数列我们称之为归并。归并排序就是利用归并思想对数列进行排序。归并排序包括“从上到下”和“从下到上”,这里主要讲从上到下的思想:(1)分解:将当前区间一分为二,即求分裂点mid=(start+end)/2;(2)求解:递归的对两个子区间a[start,mid]和a[mid+1,end]进行归并排序。递归的终结条件是子区间长度为1.(3)合并:将已排序的两个子...原创 2019-03-26 11:42:03 · 360 阅读 · 0 评论 -
数据结构与算法——队列的实现(链表实现和两个栈实现)
队列(queue)是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。允许插入的一端称为队尾(rear),允许删除的是队头(front)//链表实现队列//(1)添加的时候就添加链表的最后//(2)弹出的时候就弹出头指针后一个位置的元素//两个栈实现队列//s2为空,先将s1全部装入s2再弹出//链表实现队列#include <iostream>using ...原创 2019-03-24 21:41:59 · 372 阅读 · 0 评论 -
数据结构与算法——排序算法—(4)选择排序
1.4 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是:首先在未排序的数列中找到最小的元素,然后将其存放着数列的起始位置;接着,在从剩余未排序的元素中继续寻找最小的元素,然后放到以排序序列的末尾。直至所有元素均排序完毕。//首先是自己琢磨的代码//选择排序void selectionSort(int a[], int len){ for (int i =...原创 2019-02-27 11:31:09 · 170 阅读 · 0 评论 -
数据结构与算法——线性表—单向链表操作(含代码)
3.2 单向链表顺序表适用于不常进行插入或删除的操作,链表插入和删除非常高效,但访问不是很方便。线性表的链式存储的特点是用一组任意的存储单元存储线性表的数据元素(可连续,可不连续)。3.2.1 单链表和指针结点中存储数据元素的域称为数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)/************************************...原创 2019-03-03 11:41:57 · 286 阅读 · 0 评论 -
数据结构与算法——排序算法—(2)直接插入排序
1.2 直接插入排序直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表。开始时有序表值包含一个元素,无序表中有n-1个元素,排序过程中每次从无序表中取出一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1此可完成排序过程。//直接插入排序void insertSort(int* array,int len...原创 2019-02-25 22:25:55 · 299 阅读 · 0 评论 -
数据结构与算法——排序算法—(3)快速排序
1.2 快速排序快速排序(Quick Sort)的基本思想是选择一个基数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据都比另一部分的所有数据要小。然后,在按此方法对这两部分的数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流畅:(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在前面,所有比基准值大的放在后面(相同的数可以...原创 2019-02-25 15:51:17 · 225 阅读 · 0 评论 -
数据结构与算法——排序算法—(1)冒泡排序
数据结构一直是技术面试的重点,大多数面试题都是围绕数组、字符串、链表、树、栈以及队列这几种常见的数据结构展开的。1 排序算法:1.1 冒泡排序冒泡排序(Bubble Sort),是一种较简单的排序算法,它会遍历若干次要排序的数列,每次遍历时,都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则它们交换位置。这样一次遍历后,最大的元素就在数列的末尾。采用相同的方法再遍历一次,第二大元素...原创 2019-02-24 21:51:57 · 229 阅读 · 0 评论 -
数据结构与算法——线性表—顺序表(顺序线性表)
线性表(linear list)是最简单,也是最基本的一种线性数据结构,它有两种存储表示方法:顺序表和链表。它的主要基本操作是插入,删除和查找。3.1 顺序表(顺序线性表)顺序表是用一组地址连续的顺序存储单元依次存储数据元素的线性结构。换句话说,将线性表中的数据元素一个挨一个得存放在某个存储区域中。顺序表又称顺序线性表(顺序存储的线性表)特点:具有随机存取的特点,即快速查找。但是做插入和删除...原创 2019-02-27 22:01:20 · 1460 阅读 · 0 评论 -
各种排序算法的时间复杂度和空间复杂度
原创 2019-09-10 09:36:43 · 646 阅读 · 0 评论