指针

AC自动机算法详解(入门)

空扰寡人 提交于 2020-03-14 04:20:13
AC自动机算法详解 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。 如果你对KMP算法和了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配且新的B[j+1]恰好与A[i+1]匹配,而next函数恰恰记录了这个j应该调整到的位置。同样AC自动机的失败指针具有同样的功能,也就是说当我们的模式串在Tire上进行匹配时,如果与当前节点的关键字不能继续匹配的时候,就应该去当前节点的失败指针所指向的节点继续进行匹配。 看下面这个例子:给定5个单词:say she shr he her

C高级第一次作业

与世无争的帅哥 提交于 2020-03-14 03:03:00
未来两周学习内容 复习指针的定义和引用 指针的应用场景: 指针作为函数参数(角色互换) 指针作为函数的参数返回多个值 指针、数组和地址间的关系 使用指针进行数组操作 数组名(指针)作为函数参数(冒泡排序) 指针和字符串的关系 字符串和字符指针 常用字符串处理函数 作业要求一 (20分) 完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里: 1)C高级第一次PTA作业(1) 这部分题目较简单,流程图可画可不画,但请说明指针在题目中的作用。 2)C高级第一次PTA作业(2、3) 作业要求二(60分) 请将pta作业编程题目的解题思路和调试过程记录在博客中,每道题目的具体格式如下: 题目6-1 计算两数的和与差 1 设计思路(6分) (1)主要描述题目算法(1分)。可以用文字描述(不允许使用伪代码),如: 第一步:### 第二步:### ...... (2)流程图(4分) 2.实验代码(2分) 注意:将代码贴在此处,必须使用插入代码的方式!!禁止将代码直接粘贴到博客上,否则此题0分。 3.本题调试过程碰到问题及解决办法(12分) 错误信息采用以下格式 错误信息1:(可以截图表示)    错误原因:    改正方法:    错误信息2:    错误原因:    改正方法: ...... 要求三、学习总结和进度(20分) 1

解决项目中内存泄漏的问题

半城伤御伤魂 提交于 2020-03-13 22:10:30
根据大佬的文章而来,加上了自己代码的具体例子 关于内存泄漏的问题,根据经验总结如下(持续补充): 原则是, 有 new 就有delete 。 # 普通C++ 1 Static对象 尤其是单例模式,目的是整个程序的生命周期只有一个对象实例,但在退出时必须记得删除。(比如绑定mainwindow的析构函数,或者closeEvent等)。 /** * @brief The MAP_GR_DIS class * 采用单例模式,在private区有单一实例 * 获取实例的方法: * MAP_GR_DIS::getInstance * 举个例子: * 比如我想调用NoMeasuringDistance()这个函数 * 就可以MAP_GR_DIS::getInstance()->NoMeasuringDistance(); */ class MAP_GR_DIS: public MAP_OSG_BaseHandler { public: MAP_GR_DIS(); static MAP_GR_DIS * getInstance(); //获取单一实例的办法 static bool clickState; static void deleteDistanceObject(); private: static MAP_GR_DIS * disObject; 比如说这个类,MAP_GR_DIS

Delphi 记录类型- 结构指针

◇◆丶佛笑我妖孽 提交于 2020-03-13 13:46:51
转自:万一老师的 Delphi 博客 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class (TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end ; var Form1: TForm1; implementation {$R *.dfm} type TRec = record {定义结构 TRec} name: string [ 12 ]; age: Word; end ; TPRec = ^TRec; {定义 TRec 结构的指针类型 TPRec} var Rec: TRec; {声明结构变量} PRec1,PRec2:

C# 指针使用总结

拈花ヽ惹草 提交于 2020-03-13 09:37:32
C#为了类型安全,默认并不支持指针。但是也并不是说C#不支持指针,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式。在不安全模式下,我们可以直接操作内存,这样就可以使用指针了。在不安全模式下,CLR并不检测unsafe代码的安全,而是直接执行代码。unsafe代码的安全需要开发人员自行检测。 一、Vs2010中开启unsafe code 的方式 在方法、类、代码块中使用unsafe关键词,如: 1 unsafe static void Main(string[] args){ //代码} 2 3 unsafe 4 { 5 //代码块 6 } 然后再项目上点击鼠标右键,选择“属性”,在“生成”选项卡中选中“允许不安全代码” 二、C#可以定义为指针的类型有 sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, struct(结构体),结构体中只能包括非托管类型。 三、C#指针操作符 操作符 说明 * 取值运算符 & 取址运算符 -> 通过指针处理结构体中的数据(获取或赋值) ++与– 指针增、减操作 fixed 用户暂时固定托管代码中引用类型的位置。 Stackallc 分配内存 例如分配内存 1 char* cptr =

复制带随机指针的链表

筅森魡賤 提交于 2020-03-13 01:56:04
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝 。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val :一个表示 Node.val 的整数。 random_index :随机指针指向的节点索引(范围从 0 到 n-1 );如果不指向任何节点,则为 null 。 /* // Definition for a Node. class Node { public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; } }; */ class Solution { public: Node* copyRandomList(Node* head) { if(head == NULL){ return head; } Node *p = head; Node *q = NULL; while(p != NULL){ q = new Node(p->val); q->random = p->random; q->next = p->next; p->next = q; p = q->next; } Node

Redis ZSet (5)

流过昼夜 提交于 2020-03-13 00:05:45
存储类型 ZSet集合基本与Set相同,只是多了一个数值类型属性score,score相同时,按照Key的ASC码排序。 数据结构对比 数据结构 是否允许重复 是否有序 有序实现方式 List 是 是 索引下标 Set 否 否 无 ZSet 否 是 score属性 # 无序插入 127.0.0.1:6379> zadd lzset 20 c 30 d 10 b 1 a (integer) 4 # 获取数据是有序的 127.0.0.1:6379> zrange lzset 0 -1 withscores 1) "a" 2) "1" 3) "b" 4) "10" 5) "c" 6) "20" 7) "d" 8) "30" 存储(实现)原理 同时满足以下条件时使用ziplist编码: 元素数量小于128个 所有member的长度都小于64字节 在ziplist的内部,按照score排序递增来存储。插入的时候要移动之后的数据。 redis.conf配置 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 超过阈值之后,使用skiplist+dict存储。 什么是skiplist? 下边是普通的有序列表 在这样一个链表中,如果我们要查找某个数据,那么需要从头开始逐个进行比较,直到找到包含数据的那个节点

字符串指针法赋值

守給你的承諾、 提交于 2020-03-12 19:20:07
1 //字符串指针法赋值 2 # include<stdio.h> 3 char a[]="I am a student!"; 4 char b[20]; 5 char *p1=a,*p2=b; 6 int main() 7 { 8 while(*p2++=*p1++); //while(*b++=*a++)或while((*b++=*a++)!=0) 9 printf("%s\n",b); 10 printf("%s\n",b); 11 for(int i=0;*(b+i)!=0;i++) 12 printf("%c",*(b+i)); 13 printf("\n"); 14 return 0; 15 } 运行结果: 来源: https://www.cnblogs.com/bboykaku/p/12481922.html

用C#解决LeetCode环形链表

一世执手 提交于 2020-03-12 17:12:49
题目 思路 定义快、慢两个指针,遍历链表; 如果链表中不存在环,快指针会先到达尾部,返回false; 如果链表中最终未发现快指针与慢指针不相同,返回true。 代码块 /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public bool HasCycle ( ListNode head ) { if ( head == null || head . next == null ) { return false ; } ListNode slow = head ; ListNode fast = head . next ; while ( slow != fast ) { if ( fast == null || fast . next == null ) { return false ; } slow = slow . next ; fast = fast . next . next ; } return true ; } } 运行结果 来源

8086汇编 栈操作

蹲街弑〆低调 提交于 2020-03-12 12:23:37
8086汇编 栈操作 栈结构 一、说明 栈是一种只能在一端进行插入或删除操作的数据结构。 栈有两个基本的操作:入栈和出栈。 入栈:将一个新的元素放到栈顶; 出栈:从栈顶取出一个元素。 栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。 栈的操作规则:LIFO(Last In First Out,后进先出)。 二、8086栈 8086CPU提供相关的指令,支持用栈的方式访问内存空间。 基于8086CPU的编程,可以将一段内存当作栈来使用。 栈操作 一、指令介绍   push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。 执行push和pop指令时,SP 中的内容自动改变。 在SS,SP中存放栈顶的段地址和偏移地址,入栈和出栈指令根据SS:SP指示的地址,按照栈的方式访问内存单元。 8086CPU中,PUSH(入栈)和 POP(出栈)指令: push ax:将ax中的数据送入栈中 pop ax:从栈顶取出数据送入ax 8086CPU中,有两个与栈相关的寄存器: 栈段寄存器SS      - 存放栈顶的段地址 栈顶指针寄存器SP    - 存放栈顶的偏移地址 SS:SP     - 指向栈顶元素。 注:(以字为单位对栈进行操作) 二、原理解析 1、例