数据结构----带头循环双链表(带哨兵位)(C语言)

        数据结构----带头循环双链表(带哨兵位)(C语言)_第1张图片

        双链表作为数据结构中的非线性表结构,对比于单链表具有它的优势:可以直接找到当前结点的上下结点。但由于双链表的这个特性,如果不带哨兵位,一不小心就可能手撕一个错的双链表出来。所以今天我们写一个带哨兵位的循环双链表。

        非循环双链表的话,实现起来和循环双链表差别不大,只是头尾并没有相连,而是指向NULL。

数据结构----带头循环双链表(带哨兵位)(C语言)_第2张图片

        今天,我将手撕一个双链表,包括双链表的初始化,插入删除,查找等一系列操作,准备好了吗!!!

        先来一个抽象图,理解理解。

数据结构----带头循环双链表(带哨兵位)(C语言)_第3张图片

        来了!

        首先,不可避免的是创造结构体和类型重定义:

typedef int DLDatatype;

typedef struct DListNode
{
	DLDatatype data;
	struct DListNode* prev;
	struct DListNode* next;
}DLNode;

         然后由于涉及插入操作,我们需要写一个结点创造函数:

        1、 结点的创造

DLNode* CreateNode(DLDatatype x)
{
	DLNode* newnode = (DLNode*)malloc(sizeof(DLNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	newnode->data = x;
	newnode->prev = NULL;
	newnode->next = NULL;
	return newnode;
}

        2、初始化哨兵位

你可能感兴趣的:(数据结构,数据结构,c语言,数据库)