自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 数据结构:堆的实现

首先我简单的介绍一下有关堆的性质: 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元 素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: Ki <= K2*i+1 且 Ki<= K2*i+2 (Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称为小堆(或大堆)。 小堆(大堆)中:任一结点的关键码均小于(大于)等于它的左

2018-04-30 16:52:33 140

原创 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间 复杂度为O(1)

实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间 复杂度为O(1) ,要求时间复杂度为O(1),我们可以在一个栈里定义两个数组,一个数组_array用来存放数据,另一个数组_min用来存放最小值,当栈为空的时候首先入栈第一个数,在两个数组分别存放这个数,当下一个数入栈时,将其存放到数组_array中,然后再和数组_min中最顶处元素比较,若小于该数,则存放进去(...

2018-04-26 00:55:10 789 2

原创 判断单链表是否带环?若带环,求环的长度?返回环的入口点?

判断单链表是否带环,可以先定义两个指向链表首节点的快慢指针,快指针每次沿着链表向后走两次,慢指针向后走一次,若快慢指针相遇说明链表带环。 环的长度:在快慢指针第一次相遇时记录相遇点,让慢指针继续走,再次经过相遇点时经过的长度便是环的长度。 入口点:假设从链表的头到环的入口点长度为L,从入口点到第一次相遇点的长度为d,从第一次相遇点到入口点的长度为x,根据快指针走过的长度是慢指针的两倍可以得到 2

2018-04-21 23:56:58 207

原创 合并两个有序链表,合并后依然有序

合并两个有序链表,合并后的链表即为新链表newNode,首先判断两个链表list1和list2的首个节点大小,让新链表newNode指向较小的节点,假设list1较小,然后让list1指向下一个节点,再与list2进行比较,将较小的节点与newNode链接,直到有一个链表的所有节点都合并,再将剩下没有比较的部分链表链接到新链表后面。 函数实现:typedef int DataT

2018-04-21 00:37:36 3485

原创 逆置、排序(冒泡排序)单链表

逆置单链表:首先定义一个新的指针newHead指向当前链表的第一个节点,然后定义cur1记录链表的下一个节点,使该节点指向newHead,依次类推,完成单链表的逆置 typedef struct SListNode{ struct SListNode* _next; DataType _data;}SListNode;SListNode* SListReverse(SListN

2018-04-18 00:21:47 374

原创 单链表实现约瑟夫环

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从第一个人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌只剩下一个人。 那么如何用单链表来实现约瑟夫环呢,首先我们需要构建一个带环链表,定义一个指针cur来记录当前节点位置,定义prev来记录前一个节点位置,当循环到第k次时,将prev和cur的下

2018-04-16 23:37:46 332

原创 在无头单链表的一个节点前插入一个节点(不能遍历链表)

首先创建一个新的节点newnode,在节点pos之前插入新的节点,因为不能遍历链表,所以不能用常规的插入操作来实现,我们先记录pos的下一个节点next,让新的节点的数据为pos节点的数据,再让pos节点的数据为新的节点的数据,这样,只要将新的节点链接到pos节点后面就可以实现。 typedef struct SListNode{ struct SListNode* _next;

2018-04-14 23:59:51 456

原创 删除一个无头单链表的非尾节点(不能遍历链表)

我们在对单链表进行删除操作的时候,只需要遍历一遍链表即可删除,但是如果不允许遍历链表我们要怎样进行处理呢。 我们如果直接释放掉要删除的节点,那我们就无法得到前一个节点,链表就不能重新链接起来,我们可以将要删除节点的内容改为,该节点下一个节点的内容,然后释放下一节点,这样便不需要知道前一个节点即可完成删除并重新链接。 typedef struct SListNode{ struct SL

2018-04-14 20:20:18 257

原创 从尾到头打印单链表(递归与非递归)

非递归算法: 首先定义两个尾指针tail1和tail2,遍历链表使tail1指向链表的尾节点,然后输出数据,再使tail2等于tail1记录该节点,第二次遍历时使tail1指向tail2的前一个节点,输出数据,依次类推完成打印。 递归算法: 若该节点的下一个节点为空的时候直接打印,若不为空传入下一个节点为参数再次执行打印函数,完成递归。 代码实现: 结构体定义及函数声明:typedef

2018-04-12 14:57:01 905

原创 数据结构:队列的实现

函数声明以及头文件:#include<stdio.h>#include<windows.h>#include<assert.h>typedef int DataType;typedef struct QueueNode{ DataType _data; struct QueueNode* _next;}QueueNode;typedef struct Queue{

2018-04-11 23:30:50 134

原创 数据结构:用顺序表实现栈

头文件及函数声明:#include<stdio.h>#include<windows.h>#include<malloc.h>#include<assert.h>typedef int DataType;typedef struct Stack{ DataType* _array; size_t _top; //栈顶 size_t _end;}Stack;// 栈

2018-04-08 14:50:15 246

原创 数据结构:带头结点的双向循环链表

头文件及函数声明:#include<stdio.h>#include<windows.h>#include<assert.h>typedef int DataType;typedef struct DListNode{ struct DListNode* _next; struct DListNode* _prev; DataType _data;}DListNode

2018-04-05 22:26:58 531

原创 数据结构:单链表实现

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素的存储映像,称为结点(node)。它包括两个城: 其中存储数据元素信息的域称为数据域: 存储直接后继

2018-04-01 01:51:37 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除