![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 62
enjoymyselflzz
这个作者很懒,什么都没留下…
展开
-
在linux环境下完成线性表的增删查改
#include"SeqList.h" void SeqListInit(SeqList *seqlist)//对线性表的初始化 { if(seqlist==NULL){ return; } seqlist->size=0; } void SeqListPush...原创 2018-03-20 21:24:41 · 169 阅读 · 0 评论 -
图解插入排序
插入排序(升序):稳定,时间复杂度 O(n^2) 具体实现思路如图: 具体实现代码如下: void InsertSort(int *a ,int len) { if (len <= 1) { return; } int count = 1; for (; count < len; count++) { int tmp = a[count]; int ...原创 2018-07-26 19:54:22 · 181 阅读 · 0 评论 -
图解选择排序
选择排序(升序排列):不稳定,时间复杂度 O(n^2) 核心思想就是打擂台,初始状态我们默认选择第一个元素作为擂主,让它依次与其他元素比较,如果小于它,那么swap两个元素,依次类推,最后的元素就是按从小到大排列。 具体实现步骤如图: 具体实现代码如下: void swap(int *a, int* b) { int tmp; tmp = *a; *a = *b; *b...原创 2018-07-26 19:42:35 · 719 阅读 · 0 评论 -
二叉搜索树
我们将查找分类可以分为如下几类:这节我们重点讲二叉搜索树,在讲之前我们先明白几个知识点:搜索:在数据元素集合中查找是否存在关键字等于某个给定关键字数据元素的过程搜索的结果:搜索成功、搜索失败用于搜索的数据集合称为搜索结构,由统一数据类型的元素组成,根据集合中数据的组织结构选择合适的搜索方法。二叉搜索树(二叉排序树):它或者是一棵空数或者具有如下的性质:若它的左子树不为空,那么左子树上所有节点的值都...原创 2018-07-13 20:06:46 · 112 阅读 · 0 评论 -
共享栈的基本操作
共享栈的实现:如图,top1从0开始向右入栈,top2从maxsize开始向左入栈,这样就可以满足在一个数组中创建两个栈,同时也避免了空间的浪费基本操作我们分为:初始化栈、入栈、出栈、取栈顶元素,具体实现代码如下 1 #include<stdio.h> 2 #de...原创 2018-07-07 17:45:50 · 4912 阅读 · 0 评论 -
查找单链表倒数第K个结点
在这里我们介绍一种简单的思路: 定义两个指针(fast和slow)都指向头结点,fast指针先走K-1次后slow指针再走,当fast->next==NULL的时候,slow指针指向的位置就是我们所要找的倒数第K个节点 为了便于理解我们画图示意: 在理解了思路后实现时还需要注意如下几个问题: 1.空指针的判断,当链表的头指针为空时,这属于非法输入,应该直接返回 2.当要查找倒数...原创 2018-07-19 14:25:34 · 1130 阅读 · 0 评论 -
快速排序
大致思路: 1 . 先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 核心思想:挖坑填数+分治 具体实现: 具体代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdl...原创 2018-07-24 15:48:24 · 158 阅读 · 0 评论 -
栈的基本操作
在进行栈的基本操作之前我们需要知道关于栈的两点知识:1.栈分为顺序栈与链式栈,顺序栈与顺序表的数据成员相同,不同之处在于顺序栈只能对栈顶元素进行入栈与出栈的操作,因此顺序栈的所有操作时间复杂度都为O(1)。2.栈的特征:先进后出下面我们讲栈的基本操作:分为五类,初始化栈,销毁栈,入栈,出栈,取栈顶元素。对顺序栈而言:初始化栈与销毁栈我们都只需要考虑将栈的有效元素size=0,入栈size++,出栈...原创 2018-06-29 10:16:06 · 1211 阅读 · 0 评论 -
堆的重要应用之堆排序
在这里我们介绍一种相对简单的方法:用上浮式调整与下沉式调整相结合来完成堆对数组中元素的排序。说一下思路:首先我们获取一个存放待排序的数组,用heap_size来限定堆的大小,heap_size=0开始,用heap_size++来扩大堆中元素的个数,每增加一个有效元素我们都调用一次Adjustup(上浮式调整)来进行排序,这样就可以保证最后成型的堆是大堆/小堆,当堆成型后我们每次取堆顶元素,这样每次...原创 2018-06-28 09:54:18 · 150 阅读 · 0 评论 -
队列的基本操作
队列的概念:1.只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表2.进行插入操作的一端称为队尾(入队列)3.进行删除操作的一端称为队头(出队列)4.队列具有先入先出的特性本节我们先以链式结构为基础讲解队列,下面我们上代码:LinkQueue.h#include <stdio.h> #include<stdlib.h> typedef char LinkQu...原创 2018-07-02 15:37:19 · 167 阅读 · 0 评论 -
堆的基本操作
在这里我将会介绍堆的几个基本操作1.堆的初始化void HeapInit(Heap *heap,Compare cmp);在这里我们可以简单粗暴一点,直接将有效值size设置为零,此外我还加了一个排序规则,Compare cmp用来控制大/小堆2.堆的插入 void HeapInsert(Heap*heap,HeapType value);在这里我们需要引入一个思路叫上浮式调整,因为堆可以看作一棵...原创 2018-06-26 12:21:09 · 301 阅读 · 0 评论 -
完成链表的增删查改以及链表长度的计算
1 #include "LinkList.h" 2 #includ...原创 2018-04-04 13:13:39 · 336 阅读 · 0 评论 -
顺序表指定位置的查找删除修改以及冒泡排序
1 #include"SeqList.h" 2 void SeqListInit(SeqList *seqlist)//顺序表的重置 3 { 4 if(seqlist==NULL){ 5 return; 6 } 7 seqlist->size=0; 8 } 9 voi...原创 2018-03-27 10:49:58 · 407 阅读 · 0 评论 -
快速排序
1 #include"SeqList.h" 2 void SeqListInit(SeqList*seqlist) 3 { 4 if(seqlist==NULL) 5 { 6 return; 7 } 8 se...原创 2018-04-01 12:20:13 · 96 阅读 · 0 评论 -
图解希尔排序
希尔排序:不稳定,时间复杂度 平均时间 O(nlogn) 最差时间O(n^s) 1<s<2 具体实现思路如图: 实现代码如下: void swap(int *a, int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void ShellSort(int *a, int len) { if (len <= 1) ...原创 2018-07-26 21:44:33 · 215 阅读 · 0 评论