1.单链表(带头结点)的初始化
即,构造一个空表,如下图,
- 算法步骤:
- 1.生成新结点作头结点,用头指针L指向头结点。
- 2.将头指针的指针域置空。
- 算法描述:
Status InitList_L(LinkList& L)
{
L = new LNode; //在C语言里,为 L=(LinkList)malloc(sizeof(LNode));
L->next = NULL;
return OK;
}
2.判断链表是否为空
空表:链表中无元素,但头指针和头结点仍然在。
- 算法思路:判断头结点的指针域是否为空。
- 算法描述:
int ListEmpty(LinkList L) //若L为空表,则返回1,否则返回0
{
if (L->next) //非空
return 0;
else
return 1;
}
3.单链表的销毁
销毁单链表:在内存中删除,链表销毁后,其头指针和头结点也不会存在。
- 算法思路:从头节点开始,依次释放所有结点。
怎么能让一个指针p指向变量a?
做法就是把a的地址赋给指针变量p,即p=&a。这样就定义了一个指向a的指针p。
1.先定义一个指针p,指向当前结点(一开始,p是指向头结点的指针),即,p=L
2.让L指向下一个结点,即,L=L->next
,
3.删除当前结点p,即,delete p
4.回到第一步。
5.结束条件为:L=NULL
(循环条件为:L!=NULL
或L
) - 算法描述:
Status DestroyList_L(LinkList& L) //销毁单链表L
{
Lnode* p; //或LinkList p;
while (L)
{
p = L; //指向当前结点(一开始指向的是头节点)
L = L->next; //使L指向下一结点
delete p; //删除当前结点
}
}
4.清空单链表
清空单链表:链表在内存中仍然存在(头指针和头结点仍然在),但链表中无元素。
- 算法思路:依次释放所有结点,并将头结点指针域设置为空。
怎么能让指针p指向首元结点?p=L; //p指向头结点 p=L->next; //p指向首元结点
1.先定义一个指针p,指向当前结点(一开始,p是指向首元结点的指针),即,
p=L->next
2.在释放当前结点p之前,要先确定好下一结点的位置。所以需要再定义一个指针q,让其指向下一个结点,即,q=p->next
。然后再释放p。
3.接下来反复执行p=q;q=q->next
。
4.结束条件为:p=NULL
(循环条件为:p!=NULL
5.将头结点的指针域设置为空,即L->next=NULL
- 算法描述:
Status ClearList_L(LinkList& L) //将L设置为空表{ Lnode *p,*q; //或LinkList p,q; p = L->next; //p指向首元结点 while (p) { q = p->next; //q指向下一个结点 delete p; //删除当前结点 p = q; //将下一结点设置为当前结点 } L->next = NULL; //头结点的指针域置空 return OK;}
5.求单链表的长度
-
算法思路:从首元结点开始,依次计数所有结点。
怎么能让指向当前结点指针p指向下一结点?p=p->next; //p指向下一个结点,p往后移动一个结点
1.先定义一个指针p,指向当前结点(一开始,p是指向首元结点的指针),即,
p=L->next
。
2.若p不为空,则计1,再让p指向下一结点,即,p=p->next
。
3.结束条件为:p=NULL
(循环条件为:p!=NULL
-
算法描述:
int ListLength_L(LinkList L) //返回L中数据元素的个数
{
Lnode *p; //或LinkList p;
p = L->next; //p指向首元结点
i = 0; //计数
while (p) //遍历单链表,统计结点数
{
i++;
p = p->next; //p指向下一个结点
}
return i;
}
今天的文章数据结构时间复杂度例题详解_线性表顺序存储结构的初始化分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89050.html