数据结构与算法·其四
链表
链式存储结构
每个元素在存储器上的位置是任意的,逻辑相邻并不一定物理相邻。
每个节点存储的数据有两个部分。数据域和指针域。
访问时只能通过头节点依次向后查找,这种方法称为顺序存储法
如何判断链表是否为空
- 有头节点,头节点的指针为空时;
- 无头节点,头指针为空时;
链表种类
- 单链表:指针域只存储下一个元素的位置
- 双链表:指针域存储上一个和下一个的位置
- 循环链表:链表结点首尾相接
具体算法
- 初始化
- L=new LNode
- L->next=Null
- 销毁
- while(L){p=L;L=L->next;delete p;}
- 清空
- p=L->next;while(p){q=p->next;delete p;p=q;}L->next=NULL;
- 相比较于删除操作,仅仅保留了头节点
- 获取表长
- p=L->next;i=0;while(p){i++;p=p->next;}return i;
- 获取第i个元素
- p=L->next;j=1;while(p&&j<i){p=p->next;++j}if(!p||j>i)return ERROR;e=p->data;return OK;
- 按值查找
- p=L->next;while(p&&p->data!=e){p=p->next}return p;
- 插入节点(在第i个元素之前插入数据e)
- p=L;j=0;
- while(p&&j<i-1){p=p->next;++j;}
- if(!p||j>i-1)return ERROR
- s=new LNode;
- s->next=p->next;p->next=s;return OK;
- 删除节点(删除第i个元素)
- p=L;j=0;
- while(p&&j<i-1){p=p->next;++j;}
- if(!(p->next)||j>i-1)return ERROR;
- q=p->next;p->next=q->next;
- delete q;return OK;