数据结构
zhangyin_blog
这个作者很懒,什么都没留下…
展开
-
直接插入排序和选择排序
(一)直接插入排序思路:(1)用一个临时变量存放待排序的数字;(2)从数组前依次遍历找第一个比待排序数字大的数字的位置;(3)将从待排序的数字位置开始,到找的要插入的数字的位置之间的数字向后挪一位,最后将待排序数字插入到找到的位置;代码如下:void Insert_Sort( int *arr,int len ){ int tmp = 0;//当作哨兵位 ...原创 2018-07-24 21:39:38 · 9368 阅读 · 0 评论 -
数据结构之单链表简单操作
(一)单链表单链表结构:数据域_data和指针域_pnext,其基本操作如下列代码所示,附有注释说明://单链表结构typedef int ElemType;typedef struct Node{ ElemType _data; struct Node* _pnext;}Node,*PClist;//购买节点Node* BuyNode(){ Node* pnod...原创 2018-08-05 22:23:36 · 231 阅读 · 0 评论 -
数据结构之顺序表
(一)顺序表(1)概念:一种顺序存储结构;顺序表上的元素按照一定逻辑顺序存储一段连续的存储空间相邻的两个元素在物理位置上也相邻 可以随机访问顺序表中的元素(下标访问)。(2)分类定长顺序表,其存储单元大小不变,具有局限性;不定长顺序表,其存储单元大小可变,当存储空间满了之后插入元素时可进行自动扩充;(3)下列主要写出了不定长顺序表的代码,定长顺序表与不定长在操作上基本相同,除了...原创 2018-08-11 20:57:02 · 154 阅读 · 0 评论 -
数据结构之队列
(一)队列(1)概念 是运算受到限制的线性表,只允许在表的一端进行入队,在另一端进行出队;通常我们在尾部进行入队(rear),在对头就行出队(front)。头删和尾插的时间复杂度都为O(1);(2)分类循环顺序队列 1.入队时采用尾插,时间复杂度是O(1);出队时由于每次在对头删除一个数据就需要将后面的数据统一往前挪,时间复杂度要有O(n);为了降低复杂度,我们通常将其设置成...原创 2018-08-11 21:08:06 · 150 阅读 · 0 评论 -
数据结构之静态链表
静态链表:静态链表的结构:(1)整体是一个数组,包括data域和next域;其中next保存的是下一个格子的下标,并且最后一格保存空闲链的表头;(2)静态链表有两条链,0号下标是有效链的表头;1号下标是空闲链的表头;(3)在判断链表是否为满的时候只要看空闲链的表头next域的数据是否是1,如果是1就证明已满; 在判断链表是否为空只要看有效链表头next域存储的数据是否是0,如果是0...原创 2018-08-11 21:12:49 · 955 阅读 · 0 评论 -
数据结构之栈
(1)栈:其特点是数据遵循“先进后出”的原则,是一个由低地址向高地址增长的。(2)分类:定长顺序栈、不定长顺序栈、链式栈(3)代码如下:#define SIZE 10typedef int ElemType;typedef struct Stack{ ElemType elem[SIZE]; int top;//栈顶指针,标记当前可以存放数据的下标}Stack,*PSta...原创 2018-08-11 21:19:11 · 119 阅读 · 0 评论 -
常见排序总结
/*选择排序每一趟选取第i个关键字,与剩下的n-i关键字进行比较,找出最大的值与刚开始选择的i下标对应的值交换第一趟: 0 , 1~n-1第二趟:1, 2~n-1.....应用场景 最好最坏情况时间复杂度都是O(n^2) 空间复杂度为O(1) 最坏情况:对相对有序的一组数据排序 不稳定 由其交换引起的 适用于数量不大并且交换次数少的情况下*/void Selec...原创 2018-08-18 14:36:09 · 194 阅读 · 0 评论 -
快排三种基本解法以及两种快排优化
/* 快速排序 基本思想 选定每次排序的基准数据 在剩下的位置将小于基准值的数据放在基准值得左边,大于基准值的数据放到基准值的右边 一次划分之后 如果此基准值的左右两边仍存在大于两个数据 则继续划分排序 直至每个数字都有序 递归实现Quick_Sort1(int *arr,int len):快排一次划分的时间复杂度为O(logn) 最坏就是在有序条件下 时间复杂度为O(n^2...原创 2018-08-18 14:56:13 · 5356 阅读 · 0 评论