p 是一个指向某类型结构的指针;p->next 是 p 所指向的结构的 next 成员;p = p->next 是把p->next 的值赋给 p。如果这两句语句中的 p 变量是同一个 p 的话,那么p->next 的数据类型一定是一个指向结构的指针。
一、数据结构里面pnext与next的区别
p 是一个指向某类型结构的指针;
p->next 是 p 所指向的结构的 next 成员;
p = p->next 是把 p->next 的值赋给 p。
如果这两句语句中的 p 变量是同一个 p 的话,那么 p->next 的数据类型一定是一个指向结构的指针,而且所指向的结构的类型与 p->next 所在结构的类型相同。
#include<stdio.h> //链表的结构及其指针 struct stru_num { int num; struct stru_num *next;//结构本身不能含有同类型的结构,但可以含有指向同类型的指针 } *p; int main(void) { struct stru_num list[10];//链表 int index; p = list;//初始化指针 for(index = 0;index < 10;index++) //赋值 { p->next = p + 1; p->num = index; p = p->next;//与 p++ 效果等同 } (p – 1)->next = NULL;//末元素指向空指针, //输入除首元素的其他元素 p = list; for(index = 0;index < 9;index++) printf(“%d”,(p[index].next)->num); return 0; } |
延伸阅读:
二、KMP算法
相比BF算法的改进:每当一趟匹配过程中出现字符比较不等时,无需回溯i指针(即无需将i指针完全退回至i-j+1),而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。
需要解决的问题:当主串中的第i个字符与模式中第j个字符比较不相等时,主串中第i个字符(i指针不回溯)应与模式中哪个字符再比较?—-假设从主串中第i个字符与模式中的第k个字符再进行比较
它是则呢样来消除回溯的呢?就是因为它提取并运用了加速匹配的信息!
这种信息就是对于每模式串 t 的每个元素 t j,都存在一个实数 k ,使得模式串 t 开头的 k 个字符(t 0 t 1…t k-1)依次与 t j 前面的 k(t j-k t j-k+1…t j-1,这里名列前茅个字符 t j-k 非常多从 t 1 开始,所以 k < j)个字符相同。如果这样的 k 有多个,则取最大的一个。模式串 t 中每个位置 j 的字符都有这种信息,采用 next 数组表示,即 next[ j ]=MAX{ k }。