
数据结构
dayday_upyy
越努力 越幸运呀
展开
-
冒泡排序了解一下
什么是冒泡排序?冒泡排序是一种最基础的交换排序。 大家一定喝过汽水,汽水中常常有许多小小的气泡,哔啦哗啦飘到上面来。这是因为组成气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。 而我们的冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身的大小,一点一点向着数组的一侧移动。 具体如何移动呢?让我们来看个例子(从小到大的顺序排列) 代码实现: ...原创 2018-07-30 13:41:24 · 152 阅读 · 0 评论 -
选择排序了解一下
选择排序是一种简单直观的排序算法,它的主要思想:初始时在序列中找到最小(大)的元素,放到序列的起始位置作为已排序序列;然后再从剩余未排序元素中继续寻找最小(大)的元素,放到已排序序列的末尾,以此类推,直到所有元素均排序完毕。 即每遍历一次就记住了最大(小)的元素的位置,最后仅需要一次交换操作就可以放到其适合的位置。 如下图所示: 实现代码如下: #include<stdio.h...原创 2018-07-30 14:22:53 · 191 阅读 · 0 评论 -
时间复杂度及空间复杂度的计算
时间复杂度:执行的次数和问题规模之间的函数关系。 时间复杂度计算方法: 1.用常数1取代运行时间中的所有加法常数; 2.只考虑最高阶项,低阶项直接丢掉; 3.系数不要,指数不能丢。 最后,得到的最后结果就是时间复杂度。 常见的时间复杂度: 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O( log n ),线性阶O(n),平方阶O(n^2),立方阶O(n^3),...,k次方阶...原创 2018-07-30 14:48:41 · 3015 阅读 · 0 评论 -
线性表------静态分配(List)
/* 线性表定义:从名字上能够感觉到,是具有像线一样的性质的表。 是零个或多个数据元素的有限序列。 首先它是一个序列,也就是说元素之间是有顺序的,若元素存在多个,则第一个元素无直接前驱, 最后一个元素无直接后继,其他元素每个元素都有一个前驱和后继; 其次,线性表强调有限,假设线性表长度为n,当n=0时表示空表。 */ //线性表的静态存储结构 #define SIZE 20;//存储空间初始...原创 2018-08-10 16:07:39 · 620 阅读 · 0 评论 -
线性表----动态分配
//线性表的动态分配 #include<stdio.h> #include<stdlib.h> #include<assert.h> #define INIT_SIZE 10 typedef struct DSqlist { int *elem; int usedsize;//有效数据个数 int size;//当前分配的存储的容量 }DSqlist ...原创 2018-08-11 12:58:44 · 446 阅读 · 0 评论 -
单链表-----带头结点的单链表
线性表 优点:无需为表中元素之间逻辑关系而增加额外的存储空间;可以快速的存储表中任意位置的元素。 缺点:插入和删除需要移动大量数据;(因为相邻两元素的存储位置也具有邻居关系,它们在内存中的位置也是挨着的,中间没有空隙 ,当然就无法快速地介入,而删除后中间留有空隙,自然需要弥补) 解决这一缺陷思路: 所有元素不考虑相邻位置,哪里有空位就在哪里,而只是让每个元素知道它下一个元素的位置在...原创 2018-08-11 13:04:43 · 1139 阅读 · 0 评论 -
快速排序(Quick Sort)
快速Quick Sort排序主要思想: (1)分治思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归地解决这些子问题,然后这些子问题的解得的组合为原问题的解。 (2)快速排序是对冒泡排序的一种改进,基本思想是在待排序的序列中选取一个值作为一个基准值,按照这个基准值得大小将这个序列划分成两个子序列, 基准值会在这两个子序列的中间,一边是比基准小的,另一边就是比基准大的。 这样快速排序...原创 2018-08-07 12:55:40 · 220 阅读 · 0 评论