前言
声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出数据结构每日一题
要点
- 分配节点
- 数组初始化
- 删除结点
- 辅助数组的释放
思想
- 利用一个标记数组来记录访问的情况
- 将结点中的值变成数组中的下标值
- 在第一个访问到一个结点就利用辅助数组将节点中的值对应下标的值置为1,在下一次访问到时,就将结点删除
- 利用三元组将节点中的值变成正数
- 涉及到节点的释放利用一个pre指针获取节点的前驱,方便删除
void Delete_Same(Linklist L,int n){{
int m;
LNode *pre=head,*p=pre->next;
c = (int *)malloc(sizeof(int )*n+1); //数组下标从0开始故申请n+1个节点
for(int i=0; i<n;i++)c.data[i]=0; //初始化数组
while(p!= NULL){
m=p->data > 0 ?p->data:-p->data; //得到节点值的绝对值
c.data[p->data]=1; //标记已经访问
if(c.data[p->data]==1) //已经访问过的,删除节点
{
pre->next=p->next;
free(p); //删除节点
}
else{
pre=p;
p=pre->next;
}
}
free(c); //释放辅助空间
}
今日易错题
- B+树和B树的最关键的区别:B+树可以顺序查找,B树不可以
- 稀疏矩阵:用三元组,十字链表存储