在实际生活中,我们用到的最多的两种链表结构就是单链表和双向带头链表,上一篇已经介绍了单链表的实现以及一些应用,接下来我为大家详细介绍一下双向链表,以及一些链表oj题
一、双向链表的概念
1、概念:概念:双向链表是每个结点除后继指针外还有⼀个前驱指针。双向链表也有带头结点结构和不带头结点结构两种,带头结点的双向链表更为常用;另外,双向链表也可以有循环和非循环两种结构,循环结构的双向链表更为常用。
二、双向链表的实现
头文件List.h
#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int LTDateType;
typedef struct ListNode
{
LTDateType date;
struct ListNode* next;
struct ListNode* prev;
}LTNode;
//void ListInit(LTNode** pphead);
void ListPrint(LTNode* phead);
void ListPopBack(LTNode* phead);
LTNode* ListInit();//初始化
LTNode* BuyLTNode(LTDateType x);
void ListPushBack(LTNode* phead, LTDateType x);
void ListPushFront(LTNode* phead, LTDateType x);
void ListPopFront(LTNode* phead);
LTNode* ListFind(LTNode* phead, LTDateType x);
//在pos前插入
void ListInsert(LTNode* pos, LTDateType x);
//删除pos位置的节点
void ListErease(LTNode* pos);
void ListDestory(LTNode* phead);
源文件List.C
#include"List.h"
LTNode* BuyLTNode(LTDateType x)
{
LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));
if (newnode == NULL)
{
printf("malloc fail\n");
exit(-1);
}
newnode->date = x;
newnode->next = NULL;
newnode->prev = NULL;
return newnode;
}
//void ListInit(LTNode** pphead)
//{
// assert(pphead);
// *pphead = BuyLTNode(0);
// (*pphead)->next = *pphead;
// (*pphead)->prev = *pphead;
/
沃梦达教程
本文标题为:C语言超详细i讲解双向链表


基础教程推荐
猜你喜欢
- C++高级数据结构之并查集 2023-04-20
- 使用C/C++读写.mat文件的方法详解 2023-03-05
- 漫画讲解C语言中最近公共祖先的三种类型 2023-01-01
- C语言预编译#define(预处理) 2023-04-03
- 使用VS2022开发在线远程编译部署的C++程序(图文详解) 2023-01-15
- C/C++ Qt StatusBar底部状态栏应用教程 2023-01-10
- 如何告诉 MinGW 链接器不要导出所有符号? 2022-10-07
- C语言实现简易停车场管理系统 2023-03-13
- C++类和对象到底是什么 2022-11-12
- C语言文件操作与相关函数介绍 2023-06-13