今天没有刷力扣。看了算法笔记中链表那块。对链表的使用我还是蛮薄弱的,要加强。
我才知道还有静态链表。静态链表就是用结构体数组来存储链表,不用动态分配节点内存。节点的地址就是数组的下标。
1.动态链表:
一般节点定义如下:
struct Node{
int data;
Node * next;
};
动态分配节点内存:
malloc:
typename *p=(typename*) malloc(sizeof(typename));
new:
typename *p=new int;
typename *p=new int[100];
释放内存:动态分配内存后,为了防止内存泄漏应该及时释放内存。
free(p):与malloc搭配使用。先释放内存,然后将p指向NULL
delete p/delete [] p :与new 搭配使用,效果与free()相同。
链表的基本操作:创建,查找,插入,删除。
一般都有头节点指向链表的第一个节点,头节点数据域为空。
2.静态链表
结点定义方式:
struct Node{
int data;
int next;
}node[size];
静态链表题目的模板
1、定义
struct Node{
int address;
typename data;
int next;
xxx;//节点的某个性质
}node[size];
2、初始化
一般来说,需要对定义中的xxx进行初始化,将其定义为正常情况下达不到的数字
for(int i=0;i<maxn;i++)
{
node[i].xxx=0;
}
3、一般题目都会给出首结点地址,根据首结点遍历得到整条链表。
int p=begin,count=0;
while(p!=-1) //-1代表链表结束
{
xxx=1;
count++; //count为链表的结点个数
p=node[p]->next;
}
4、可能题目给出的结点不都是有效的,一般需要对数组排序将有效结点移到数组左端,然后用步骤3得到的count来访问。
总结:利用好时间,不能摸鱼,多敲,加油。