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