随笔分类 - 数据结构
摘要:之前说了单链表,下面来说一下双向链表。和单链表不同,双向链表中的每个节点都有两个指针,分别用来指向它的前驱和后继。所以从双向链表中的 任意一个节点开始,都可以很方便地访问到他的钱去纪念和后继结点。下面给张图来展示一下什么是双向链表 这就是双向链表,每个结点都有两个指针,其中表头结点的前驱指针prio
阅读全文
摘要:二分法排序其实是一种改进的插入排序,也是通过查找待插入位置来实现排序,这和插入排序是类似的。 算法思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半部分再进行折半,否则对后半进行折半, 直到left<right,然后再把第i个元素前1位与目标位置之间
阅读全文
摘要:直接插入排序简称插入排序,对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入 到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素, 内层循环对当前元素前面有序表进行待插入位
阅读全文
摘要:鸡尾酒排序又叫双向冒泡排序,是冒泡排序的一种变形。它与冒泡排序的不同处在于排序时是以双向在序列中进行排序。以数组为例 数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位,然后再找到第二小的数 字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完
阅读全文
摘要:冒泡排序、选择排序是在学习排序算法时必先接触到的,作为一种简单的排序算法,它们的思路都很简单,所以就不再详细介绍了,直接看代码吧 1 #include<iostream> 2 using namespace std; 3 4 void swap(int a[],int i,int j) 5 { 6
阅读全文
摘要:在查找数据的时候除了暴力查找外,还可可以使用二分法查找,二分法查找又叫折半查找。二分法在查找的时候效率是比较高的,但是它有 局限性,就是仅适用于顺序表,不管是升序还是降序都适用。原理就是取顺序表的中间那个元素mid,然后用中间的元素mid和待查找元素x进 行比较大小,以此改变下次的查找区间,使得下次
阅读全文
摘要:队列和链表、堆栈一样都是一种线性结构。只不过队列的操作限定在两端,只能够在队头和队尾进行操作。它的特性是先进先出,在队尾进队头出。 队列的物理结构包括顺序存储结构和链式存储结构,也就是我们常说的顺序队列和链式队列。 这里就说一下顺序队列,顺序存储结构要预先分配内存,最好能知道队列的最大长度,在顺序队
阅读全文
摘要:栈是一种线性的数据结构,它的操作限定在了栈顶,即只能够在栈顶进行数据的插入,删除以及其它各种操作;栈的操作特性为先进后出,下面给出 一张图来说明一下栈的入栈操作。 通过这个图,发现入栈都是在栈顶进行的,top等于base表示此栈为空栈。上面的入栈顺序为A、B、C、D,在出栈的时候由于只能在栈顶操作,
阅读全文
摘要:链表的操作包括插入、删除、翻转、清空、判空、求链表长度等,下面分别找了链表的插入和删除操作的图,第一个是插入,第二个是删除。 在插入的时候,要先找到待插入的位置,一般是找到待插入位置的前一个位置,假如要在3号位置插入,那就找到2号位置,这样方便插入,下面 的代码中就提到了这一点,然后把新结点插入在3
阅读全文
摘要:介绍过了头插法,再来介绍一下尾插法。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据,最后插入到链表中的数据的顺序和输入数据的 顺序是一致的,即{1,2,3,4,5},因为尾插法每次都是在末尾部插入数据的,先插入1,此时表中数据为{1};接着在尾部插入2,此时表中数据数据
阅读全文
摘要:要使用链表,就要先创建一个链表,这里只说单链表。先介绍一下头插法创建单链表链表。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据, 最后数据存入到链表中是反过来的,即{5,4,3,2,1},因为头插法每次都是在头部插入数据的,先插入1,此时表中数据为{1};接着在头部插入
阅读全文
摘要:链表和数组一样,都是一种线性表,只不过链表中逻辑上相邻的数据在物理地址上不一定相邻,因为链表占的内存并不一定是一块儿连续的内存空间, 内存单元也可能是分散的。而数组则是占一片连续的内存空间,所以逻辑上相邻的数据在物理地址上也是相邻的。链表的插入、删除效率很高,但是不支 持随机访问,要想访问某一数据,
阅读全文

浙公网安备 33010602011771号