数据结构
qq_40395404
这个作者很懒,什么都没留下…
展开
-
单链表下的快慢指针问题
1.给定单链表,检测是否有环。 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。 //检测链表是否有环 bool Huan(List plist) { if(!plist) { return false; } Node *fast=...原创 2017-11-08 01:56:32 · 232 阅读 · 0 评论 -
递归
递归就是调用自身 eg1:打印函数 //递归 void printArr1(int *arr,int len) { if(arr==NULL || len<1) return; printArr1(arr,len-1); printf("%d ",arr[len-1]); } //非递归 void printArr(int* arr,int len) { if(arr==...原创 2018-09-06 10:23:09 · 185 阅读 · 0 评论 -
排序算法
插入排序:直接插入:思想:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。ways1: void insertSort1(int arr[], int len) { int i;//未排序序列带排序的元素下标 int j;//已排序序列最大元...原创 2017-11-11 01:55:15 · 164 阅读 · 0 评论 -
KMP算法
1.朴素查找算法 算法思想:从pos位置开始在主串中查找子串,找到就返回第一个匹配的下标,找不到就返回-1,定义变量i指向主串,定义变量j指向子串,如果相等i++,j++,否则,i退回起始的下一个下标,即i=i-j+1;,j回退到0号下标,即:j=0,结束标志:j>=子串的长度。时间复杂度O(m*n) //朴素查找算法BF int BF(const char *str,const char *原创 2017-11-26 00:41:47 · 171 阅读 · 0 评论 -
栈
栈:特殊的线性表(只允许在一边进行操作),分顺序栈(顺序表实现),链栈(链表实现)特点:后进先出顺序栈:栈头在线性表表表尾(线性表表尾插入删除时间复杂度都是O(1))定义:typedef struct Stack{ int *elem; int top; //栈顶指针,当前可以存放数据的下标 int stacksize; //栈的总格子数}Stack,*PStack;链栈:栈头在链表表表头(链...原创 2017-11-21 15:00:50 · 193 阅读 · 0 评论 -
链表
带头结点的单链表:(浪费一个结点,使得数据处理更加方便) 插入删除方便,不用移数据 1.带头结点的循环链表(与普通链表的区别就是尾的next指向头) 2.带头结点的静态链表(用顺序表实现链表,next表示数组小标,使得兼具顺序表与单链表的特点) 有两个表头,一个指向有效链表表头,一个指向空闲链表表头 0下标作为有效链表头,有效链为循环链表 1下标作为空闲链表头,空闲链为循环链表原创 2017-11-21 14:36:41 · 150 阅读 · 0 评论 -
顺序表详解
定长顺序表定义: #pragma once #define SIZE 10 typedef struct SeqList { int elem[SIZE]; //顺序表表示数组,总大小SIZE int length; //有效数据的个数 }SeqList,*PSeqList; 操作: //初始化 长度置0即可 void InitSeqList(PSeqList ps) {...原创 2017-11-21 14:05:34 · 486 阅读 · 0 评论 -
链表操作
单链表for()循环的两种初始化: 1. for(Node *p=plist; p->next !=NULL; p=p->next) //进行插入,删除操作,对链表进行修改 2. for(Node *p=plist->next; p !=NULL; p=p->next) //不对链表进行修改 单链表常考: 单链表插入的两种方法: //头插 bool ...原创 2017-10-28 22:05:34 · 137 阅读 · 0 评论 -
线性表——单链表,顺序表
单链表:(定长,不定长) 特点:查找方便 定义: 定长顺序表: #define SIZE 10 typedef struct SeqList { int elem[SIZE]; int length; }SeqList,*PSeqList; 不定长顺序表: #define INITSIZE 10 typedef struct DSeqList { int *elem;//指原创 2017-10-21 17:06:49 · 179 阅读 · 0 评论 -
二叉树
定义: 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。 二叉树的第i层至多有2^(i-1)个结点; 深度为k的二叉树至多有2^k-1个结点; 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1 深度=层数-1 定义树的结构: typedef struct BtNode { BtNode* le...原创 2018-09-06 11:38:06 · 195 阅读 · 0 评论