【数据结构】双向链表

一、双向链表

1.双向链表的结构设计

typedef struct DNode {
	int data;
	struct DNode* next; //后继指针
	struct DNode* prio; //前驱指针
	}DNode, *DList;

2.双向链表的结构示意图:

双向链表结构示意图

3.双向链表的实现

//初始化
void InitList(DList plist)
{
	assert(plist != NULL);
	plist->next = NULL;
	plist->prio = NULL;
}
//头插
bool Insert_head(DList plist, int val)
{
	assert(plist != NULL);
	DNode *p = (DNode*)malloc(sizeof(DNode));
	assert(p != NULL);
	p->data = val;
	p-<next = plist->next;
	plist->next = p;
	p->prio = plist;
	if(p->next != NULL) //多级指针记住判断
	{
		p->next->prio = p;
	}
}
//尾插
bool Insert_tail(DList plist, int val)
{
	assert(plist != NULL);
	DNode* p = (DNode*)malloc(sizeof(DNode);
	assert(p != NULL);
	p.data = val;
	DNode *q = plist;
	for(; q->next != NULL; p = p->next;)
	{
		;
	}
	p->next = q->next;
	q->next = p;
	p->prio = q;
	return true;
}
//查找第一个key值,返回节点地址,否则返回NULL
DNode* Search(DList plist, int key)
{
	assert(plist != NULL);
	DNode *p = plist->next;
	for(; p != NULL; p = p->next)
	{
		if(p->data = key)
			return p;
	}
	return NULL;
}
//删除第一个val的值
bool DelVal(DList plist, int val)
{
	assert(plist != NULL);
	DNode *p = Search(plist, val);
	p->prio->next = p->next;
	if(p->next != NULL) //多级指针
	{
		p->next->prio = p->prio;
	}
	free(p);
}
//销毁整个内存
void Destroy(DList plist)
{
	assert(plist != NULL);
	DNode *p = plist->next;
	for(; p != NULL; p=p->next)
	{
		plist->next = p->next;
		free(p);
}

4.双向链表的总结

双向链表其实和单链表一样,就是把;两条方向的单链表都处理好就行。
双向链表的考点就是多级指针,一定要注意判断

相关推荐

  1. 数据结构---双向

    2024-05-12 13:52:02       39 阅读
  2. 数据结构——双向

    2024-05-12 13:52:02       20 阅读
  3. 数据结构--双向

    2024-05-12 13:52:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 13:52:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 13:52:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 13:52:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 13:52:02       18 阅读

热门阅读

  1. 【视频/图像数据格式】基本视频/图像数据格式

    2024-05-12 13:52:02       7 阅读
  2. 了解WebSocket

    2024-05-12 13:52:02       12 阅读
  3. MapReduce

    MapReduce

    2024-05-12 13:52:02      6 阅读
  4. js方法 Array.prototype.slice()

    2024-05-12 13:52:02       10 阅读
  5. 中文域名有必要注册吗?

    2024-05-12 13:52:02       9 阅读