双向链表的知识点+例题

1.链表的种类

题中常考查以下两种:

 上一讲我们学了无头单向非循环链表,这节,让我们看一下双向链表的操作吧~

2基本操作

1,定义双向链表

 2,创建一个节点

3,初始化双链表 

 4,尾插一个节点

 5打印双向链表

 

6尾删法

 当然,在这个代码中,我们要考虑如果只有head的唯一一个节点,那我们可以检查一下,如果head->next==head,则就不尾删

代码实现:

7头插法

8 头删

void LTPopFront(LTNode* phead)
{
	assert(phead);
	assert(phead->next != head);
	LTNode* first = phead->next;
	LTNode* second = phead->next->next;
	phead->next = second;
	second->prev = phead;
	free(first);
	first = NULL;
}

9找到某个元素

10在pos位置前面插入 

void LTInsert(LTNode* pos, LTDataType x)
{
	assert(pos);
	LTNode* posprev = pos->prev;
	LTNode* newnode = CreateLTNode(x);
	//posprev  newnode pos
	newnode->next = pos;
	pos->prev = newnode;
	newnode->prev = posprev;
	posprev->next = newnode;
}

 在这个代码中,如果pos是哨兵位,那么此代码相当于尾插

让我们画个图就理解了

11销毁双向链表 

 以上就是双向链表的知识点啦~

我们学完了顺序表和链表,为了方便学习,我们来比较一下两种表吧~

好啦~我们的知识分享就到这里了~ 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个C语言的双向循环链表例题: ```c #include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; struct Node* prev; }; void insert(struct Node** head, int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; if (*head == NULL) { newNode->next = newNode; newNode->prev = newNode; *head = newNode; } else { struct Node* tail = (*head)->prev; newNode->next = *head; (*head)->prev = newNode; newNode->prev = tail; tail->next = newNode; } } void display(struct Node* head) { if (head == NULL) { printf("List is empty.\n"); return; } struct Node* current = head; do { printf("%d ", current->data); current = current->next; } while (current != head); printf("\n"); } int main() { struct Node* head = NULL; // 插入节点 insert(&head, 1); insert(&head, 2); insert(&head, 3); // 显示链表 display(head); return 0; } ``` 这个例题演示了如何创建并打印一个双向循环链表。首先,我们创建了一个结构体 `Node`,其中包含数据 `data`、下一个节点指针 `next` 和前一个节点指针 `prev`。然后,我们定义了一个插入函数 `insert`,用于将新节点插入到链表中。最后,我们定义了一个显示函数 `display`,用于打印链表中的所有节点。在 `main` 函数中,我们创建一个空链表,然后插入了三个节点,并使用 `display` 函数打印链表的内容。 这个例题只是对双向循环链表的基本操作进行了演示,你可以根据需要修改和扩展这个代码来实现更复杂的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [链表图解(双向、循环链表+链表增删)](https://blog.csdn.net/qq_52189899/article/details/121552785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值