ds:带头结点的单链表与不带头结点的单链表区别

 

写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。

 

一、带头结点的单链表

头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据(补充:在链队中,front指针可以看作头结点(例如遍历链队时也是和遍历单链表一样,while(Q->next != NULL){}),rear指针可以看作链表尾指针)

初始化:malloc申请空间后要L->next = NULL

遍历:第一个元素的值是L->next->data

插入:正常的后插,s = L->next; L->next = s;即可

删除:正常的删除,q = L->next; q->next = L->next; free(q);

 

二、不带头结点的单链表

存储结构:L->a1->a2->NULL,(补充:使用不含头结点的单链表实现的链队,第一个元素就是和单链表一样:也就是结点 a1 <==> Q->data )

初始化:malloc申请空间后要L= NULL

遍历:第一个元素的值是L->data

插入:插入位置为a1时需要做特殊处理,其他位置的插入和带头结点单链表操作一致。

当插入位置为a1时要做特殊处理:

LNode *s = (LNode *)malloc(sizeof(LNode));  // 新申请一个内存用来定义要插入的结点s

if(s == NULL){  // 空间分配失败

  return false;

} 

s.data = x;

// 插入位置为a1时

if(i == 1){

  s->next = L;

  L = s;

  return true;

}

// 插入位置非a1时

s->next = L->next;

L->next = s;

return true;

删除:删除位置为最后一个元素时需要做特殊处理,其他位置的删除和带头结点的单链表操作一致

 

posted @ 2023-05-04 22:23  _titleInfo  阅读(210)  评论(0编辑  收藏  举报
//雪花飘落效果