返回

【数据结构】双向带头循环链表的C语言代码实现

发布时间:2023-02-18 00:15:29 305
# 缺陷

1、单链表存在的缺陷

1、不能从后往前走

2、找不到前驱

因为单链表有这些缺陷,所以我们在实际应用的过程中更多的是用双向带头循环链表

2、双向带头循环链表的接口函数代码实现(C语言)

(1)链表初始化

ListNode* ListInit()
{
ListNode*phead = BuyListNode(0);
phead->next = phead;//
phead->prev = phead;
return phead;
}

(2)尾插

void ListPushBack(ListNode*phead, LTDataType x)
{
ListNode*tail = phead->prev;//
ListNode*newnode = BuyListNode(x);
tail->next = newnode;
newnode->prev = tail;
newnode->next = phead;
phead->prev = newnode;
}

(3)打印函数

void ListPrint(ListNode*phead)
{
ListNode*cur = phead->next;
while (cur != phead)
{
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}

(4)头插

void ListPopFront(ListNode*phead, LTDataType x)
{
ListNode*first = phead->next;
ListNode*newnode = BuyListNode(x);
phead->next = newnode;
newnode->prev = phead;
newnode->next = first;
first->prev = newnode;
}

(5)头删

void ListPopFront(ListNode*phead, LTDataType x)
{

ListNode*first = phead->next;
ListNode*second = first->next;
phead->next = second;
second->prev = phead;
free(first);
}

(6)尾删

void ListPopBack(ListNode*phead)
{
assert(phead->next != phead);//判断是不是一个节点也没有
ListNode*tail = phead->prev;
ListNode*prev = tail->prev;
prev->next = phead;
phead->prev = prev;
free(tail);
tail = NULL;
}


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线