![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法笔记(小甲鱼)
紫雲_玉露
这个作者很懒,什么都没留下…
展开
-
对时间复杂度的简单理解
第一部分简单来说就是忽略常数项,着重最高项。 比如说2n+1,和2n^2+1 那么我们就可以很直观的看出2n+1要快了。 但是当比较2n^2+1和5n^2+3时,可以说他们的时间复杂度是差不多的,因为当输入值n到达一个很大的数值时,他们的时间复杂度是近似的。第二部分那么怎么使用大O表示呢? 大O表示有三种表示: 1.O(1) 2.O(n) 3.O(n^m)第一个:表示的呢就是上面第一部原创 2017-06-16 14:21:49 · 2027 阅读 · 2 评论 -
单链表的头插法和尾插法
头插法将第一个节点的地址保存到新节点的next中,再将新节点的地址保存到头节点的next中。void InsertTest(Linklist *L){ Linklist q; int i; for(i = 0; i < 10; ++i){ q = (Linklist)malloc(sizeof(Node)); q->data = i;原创 2017-06-30 15:13:35 · 615 阅读 · 0 评论 -
链表使用快慢指针求中间值
思想声明两个指针r,h,开始位置都为头节点,然后向后移动,r的移动速度是h 的两倍(移动速度是指跨越的节点个数比如r = r->next->next跨越了两个节点,h = h->next,跨越了一个节点)当r到达链表尾部,那么h就刚好在链表的中间。代码#include <stdio.h>#include <stdlib.h>typedef struct Node{ int data;原创 2017-07-04 16:09:30 · 290 阅读 · 1 评论 -
链表头使用指针的问题
看了小甲鱼的讲解链表的创建课程中的一个疑问:struct Node{ int data; struct Node *next;};typedef struct Node *Linklist,Node;void InitNodeList(Linklist *L,int n){ Linklist p; int i; srand(time(0)); *L原创 2017-06-27 15:45:35 · 362 阅读 · 0 评论 -
双向链表
学习了前面的单链表之后再学习双向链表就容易理解多了。概况在双向链表中,一个节点保存了它前面一个节点,和后面一个节点的索引,可以向前访问,和向后访问。 和单链表比较起来,向前访问更加的方便。单个节点 在一个节点中呢分为三个区域,第一个区域为prior用来保存前驱节点的地址,第二个区域保存节点中的数据,第三个区域next用来保存后继节点的地址,因为一个节点中保存了前驱和后继节点,那么这个节点就可以通原创 2017-08-09 09:44:55 · 269 阅读 · 0 评论 -
栈
概况后进先出图解 如果要将栈中的数据取出,那么就必须按照3,2,1的顺序取出。代码解析#define STACK_SIZE 100 //栈的初始空间大小#define STACKPU 10 //一次扩充空间的大小typedef struct{ int *bottom;//指向栈底的指针 int *top;//指向栈顶的指针 int stackSize;//栈的内容大小原创 2017-08-12 10:09:02 · 284 阅读 · 0 评论 -
快排方法代码记录
#include <stdio.h>#include <stdlib.h>int nums[5];int main(){ int i,j; for(i=0;i<5;i++){ scanf("%d",&nums[i]); } sort(0,4); printf("\n"); for(i=0;i<5;i++){ pr原创 2017-08-07 11:08:12 · 213 阅读 · 0 评论