
数据结构
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 · 290 阅读 · 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 · 223 阅读 · 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 · 191 阅读 · 0 评论 -
KMP算法
1.朴素查找算法算法思想:从pos位置开始在主串中查找子串,找到就返回第一个匹配的下标,找不到就返回-1,定义变量i指向主串,定义变量j指向子串,如果相等i++,j++,否则,i退回起始的下一个下标,即i=i-j+1;,j回退到0号下标,即:j=0,结束标志:j>=子串的长度。时间复杂度O(m*n)//朴素查找算法BFint BF(const char *str,const char *原创 2017-11-26 00:41:47 · 214 阅读 · 0 评论 -
栈
栈:特殊的线性表(只允许在一边进行操作),分顺序栈(顺序表实现),链栈(链表实现)特点:后进先出顺序栈:栈头在线性表表表尾(线性表表尾插入删除时间复杂度都是O(1))定义:typedef struct Stack{ int *elem; int top; //栈顶指针,当前可以存放数据的下标 int stacksize; //栈的总格子数}Stack,*PStack;链栈:栈头在链表表表头(链...原创 2017-11-21 15:00:50 · 227 阅读 · 0 评论 -
链表
带头结点的单链表:(浪费一个结点,使得数据处理更加方便)插入删除方便,不用移数据1.带头结点的循环链表(与普通链表的区别就是尾的next指向头)2.带头结点的静态链表(用顺序表实现链表,next表示数组小标,使得兼具顺序表与单链表的特点)有两个表头,一个指向有效链表表头,一个指向空闲链表表头0下标作为有效链表头,有效链为循环链表1下标作为空闲链表头,空闲链为循环链表原创 2017-11-21 14:36:41 · 172 阅读 · 0 评论 -
顺序表详解
定长顺序表定义:#pragma once#define SIZE 10typedef struct SeqList{ int elem[SIZE]; //顺序表表示数组,总大小SIZE int length; //有效数据的个数}SeqList,*PSeqList;操作://初始化 长度置0即可void InitSeqList(PSeqList ps){...原创 2017-11-21 14:05:34 · 555 阅读 · 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 · 173 阅读 · 0 评论 -
线性表——单链表,顺序表
单链表:(定长,不定长)特点:查找方便定义:定长顺序表:#define SIZE 10typedef struct SeqList{ int elem[SIZE]; int length;}SeqList,*PSeqList;不定长顺序表:#define INITSIZE 10typedef struct DSeqList{ int *elem;//指原创 2017-10-21 17:06:49 · 212 阅读 · 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 · 254 阅读 · 0 评论