思维导图
![]()
重要概念的笔记
建立单链表
头插法
void CreateListF(LinkList& L, int n)
{
LinkList s;
L = new LNode;
L->next = NULL;
int i;
for (i = 0; i < n; i++)
{
s = new LNode;
cin >> s->data;
s->next = L->next;
L->next = s;
}
}
尾插法
void CreateListR(LinkList &L, int n)
{
LinkList s, r;
L = new LNode;
r = L;
int i;
for (i = 0;i < n;i++)
{
s = new LNode;
cin >> s->data;
r->next = s;
r = s;
}
r->next = NULL;
}
c++中的stack与queue
stack
1. 定义stack对象的示例代码如下:
stack<int>s1;
stack<string>s2;
2. 入栈:s1.push(x);
3. 访问栈顶:s1.top();
4. 判断栈空:s1.empty(),栈空时,返回true;
5. 访问栈中元素个数:s1.size();
queue
与stack模板相似,增加的如下:
1. 访问对首元素:q1.front();
2. 访问队尾元素:q1.back();
递归与栈的关系。递归的两大特点:
1. 自我调用
2. 必须要有递归出口
栈与队列的操作:
1. 栈为先进后出,队列为先进先出
2. 链栈插入和删除只能在表头进行,不用考虑溢出问题
串
1. 串通常以串为整体作为操作对象
2. 模式匹配
BF算法(又称穷举的),主串中的n需要回溯,速度慢,最坏情况下的时间复杂度为O(n*m)
KMP算法,主串中的n不需要回溯,速度快
数组
数组的特点:
数组的存储空间的一维的,而数组可以是多维的
数组没有加工型操作
疑难问题及解决方案
求串的next值以及nextval的值
1. 求next值需要看所求位置的前面前缀和后缀对应的个数
![]()
2. 求nextval的值需要往前推算
![]()
6-7 jmu-ds-单链表逆置
![]()
void ReverseList(LinkList &L)
{
LinkList s,r,p;
p=L;
s=new LNode;
s->next=NULL;
p=p->next;
while(p)
{
r=new LNode;
r->data=p->data;
r->next=s->next;
s->next=r;
p=p->next;
}
L=s;
}