数据结构
Xzg_2017
这个作者很懒,什么都没留下…
展开
-
朴素匹配
## **朴素匹配** ##何为朴素匹配? 朴素匹配其实就是我们所熟知的暴力匹配,简单的说,就是对主串进行遍历,与匹配串每一个字符进行匹配,如果对应的字符不相等,主串后移,匹配串不动; 匹配过程中如果相等,两个串同时向后移,如果将匹配串全部遍历,则说明找到了,返回 主串现在位置减去字串长度; 匹配过...原创 2018-07-03 00:25:21 · 616 阅读 · 0 评论 -
查找倒数第K个节点
1,实现思路查找倒数第K个节点 第一种思路: 倒数第K个节点也就是正数第N-K+1个节点吗,我们可以将链表遍历一遍求出链表的长度N,然后在遍历到第N-K+1个节点,就实现了查找倒数第K个节点。 但是这种思路需要将链表遍历两遍,那么有没有遍历一遍的方法呢? 第二章思路:可以定义两个指针,首先第一个指针指向头节点不动,第二个...原创 2018-07-22 12:34:33 · 922 阅读 · 0 评论 -
O(1)的时间复杂度下删除单链表中的节点
1,基本思路在单链表中如果要删除一个节点,需要通过头结点找到该节点的前驱节点,然后让该节点的前驱节点指向它的后继节点,然后free点当前节点就实现了单链表的删除,但是这样的删除需要遍历到当前节点的前驱节点,时间复杂度自然而然就成了O(n),那么如何O(1)删除呢?如果想要O(1)删除节点,就不能删除当前节点,因为不知道当前节点的前驱节点,删除最后单链表的链...原创 2018-07-22 12:00:30 · 2103 阅读 · 1 评论 -
合并两个排序的单链表--递归与非递归实现
链表结构定义如下:typedef int ElemType;typedef struct LNode{ ElemType data; LNode *next;}LNode; 1,递归实现合并两个升序的单链表LNode *Merge(LNode *phead1, LNode *phead2){ if(phead1 == NULL) ...原创 2018-07-22 01:48:02 · 395 阅读 · 0 评论 -
单链表的逆置
1,题目 定义一个函数,输入一个链表的头节点,逆置该链表并输出逆置链表的头节点,链表的定义如下:typedef int ElemType;typedef struct LNode{ ElemType data; LNode *next;}LNode; 2,链表逆置代码实现 LNode *ReverseList(LNo...原创 2018-07-22 00:26:50 · 1010 阅读 · 0 评论 -
堆排序
讲堆排序之前,先讲一下简单选择排序! 1,简单选择排序基本思想:就是通过n-i次关键字间的比较,从n-i+1个数据中选出关键字最小的数据,并与第i个数据进行交换。 2,简单选择排序的代码实现void Swap(int *a,int *b) //交换{ int tmp = *a; *a = *b; *b = tmp;...原创 2018-07-08 00:53:55 · 321 阅读 · 0 评论 -
希尔排序
讲希尔排序之前,先给大家讲一下直接插入排序。 1,直接插入排序什么是直接插入排序?基本思想:直接插入排序的基本操作就是将一个数据插入到已经排好序的有序表中,从而得到一个新的,数据个数增1的有序表。 2,直接插排序代码实现void InsertSort(int *arr, int n){ assert(arr != NULL &amp...原创 2018-07-07 17:38:54 · 280 阅读 · 0 评论 -
归并排序
二路归并排序 1,递归思想假设初始列表含有n个记录,则可以看成n个有序子序列,每个有序子序列的长度为1,然后两两归并,得到n/2个长度为2的有序子序列,再两两归并,如此重复下去,直到得到一个长度为n的有序序列为止。 2,递归实现二路归并排序 #define MAXSIZE 10 //定义一个宏,是arr的大小,也是需要开辟数组的大小...原创 2018-07-19 13:07:09 · 209 阅读 · 0 评论 -
KMP算法
1,## KMP算法的来源? ##由于朴素匹配算法非常低效,需要挨个遍历主串,所以有三位前辈,D.E.Knuth,J.H.Morris,和V.R.Pratt发表了一个模式匹配算法,可以大大避免重复遍历的情况,我们称这为克努特–莫里斯–普拉特算法,简称KMP算法。 2,## 何为KMP算法? ##KMP算法在匹配过程中发生失配时,并不是简单的从原始串的下...原创 2018-07-05 00:14:24 · 229 阅读 · 0 评论 -
单链表是否有环
1,实现思路如何判断一个单链表是否有环? 我们可以定义两个指针,第一个指针一次遍历一步,第二个指针一次遍历两步,如果第二个指针指向NULL,则单链表无环,如果第二个指针与第一个指针相遇,则说明有环。 2,代码实现LNode* HasCircle(LNode *phead){ if(phead ==...原创 2018-07-22 13:32:02 · 290 阅读 · 0 评论