c语言实现双链表(考研笔记)

概述

双链表在单链表的基础上,稍加改动,主要添加一个前驱节点,大体和单链表相似。

代码

结构体、头文件等

c 复制代码
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define true 1
#define false 0
#define bool char
//链表数据类型
typedef int ElementType;
//双链表
typedef struct DNode {
	ElementType data;
	struct DNode* next;
	struct DNode* prior;
} DNode;
bool intDNode(DNode** head);
bool insertNextDNode(DNode* p, DNode* s);
bool deleteDNode(DNode* p);
bool deleteNextDNode(DNode* p);
bool queryStartToEnd(DNode* head);
bool queryEndToStart(DNode* tail);

初始化

c 复制代码
bool intDNode(DNode** head) {
	*head = (DNode*)malloc(sizeof(DNode));
	if (*head == NULL) {
		return false;
	}
	(*head)->data = 0;
	(*head)->next = NULL;
	(*head)->prior = NULL;
	return true;
}

再p节点之后,插入s节点

c 复制代码
bool insertNextDNode(DNode* p, DNode* s) {
	if (p->next) {
		p->next->prior = s;
	}
	s->next = p->next;
	s->prior = p;
	p->next = s;
	return true;
}

删除指定节点p

c 复制代码
bool deleteDNode(DNode* p) {
	if (p->next) {
		p->next->prior = p->prior;
	}
	p->prior->next = p->next;
	free(p);
	return true;
}

删除当前节点的后继节点

c 复制代码
bool deleteNextDNode(DNode* p) {
	DNode* q = p->next;
	if (p == NULL) {
		return false;
	}
	p->next = q->next;
	if (q->next == NULL) {
		return false;
	}
	q->next->prior = p;
	free(q);
	return true;
}

从前往后遍历

c 复制代码
bool queryStartToEnd(DNode* head) {
	DNode* p = head;
	while (p)
	{
		printf("%d", p->data);
		p = p->next;
	}
	return true;
}

从后往前遍历

c 复制代码
bool queryEndToStart(DNode* tail) {
	DNode* p = tail;
	while (p)
	{
		printf("%d", p->data);
		p = p->prior;
	}
	return true;
}
相关推荐
houyhea7 分钟前
从香港竹脚手架到前端脚手架:那些"借来"的发展智慧与安全警示
前端
亦是远方15 分钟前
南京邮电大学使用计算机求解问题实验一(C语言简单编程练习)
c语言·开发语言·实验报告·南京邮电大学
哈哈~haha29 分钟前
Step 14: Custom CSS and Theme Colors 自定义CSS类
前端·css·ui5
Ndmzi36 分钟前
Matlab编程技巧:自定义Simulink菜单(理解补充)
前端·javascript·python
用户214118326360244 分钟前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
我命由我123451 小时前
VSCode - VSCode 修改文件树缩进
前端·ide·vscode·前端框架·编辑器·html·js
Gomiko1 小时前
C/C++基础(四):运算符
c语言·c++
SoaringHeart2 小时前
Flutter组件封装:验证码倒计时按钮 TimerButton
前端·flutter
San30.2 小时前
深入理解 JavaScript OOP:从一个「就地编辑组件」看清封装、状态与原型链
开发语言·前端·javascript·ecmascript
AAA阿giao2 小时前
JavaScript 原型与原型链:从零到精通的深度解析
前端·javascript·原型·原型模式·prototype·原型链