数据结构——双向链表

1. 简介

  之前讨论的单向链表中的结点只有一个指示之间后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。若要寻查结点的直接前驱,则需从表头指针出发。面对单向链表在这方面的不足,我们的解决方法很简单,只要在数据结构上附加一个域,使它包含指向前一个单元的指针即可。其开销是一个附加的链,它增加了空间的需求,同时也使得插入和删除的开销增加一倍,因为有更多的指针需要定位。另一方面,它简化了删除操作,因为你不再被迫使用一个指向前驱的指针来访问一个关键字。这就是我们要说的双向链表。

2. 链表的实现

/*********************************************************************************
*Copyright(C),Your Company
*FileName:  List.h
*Author:  Huangjh
*Version:
*Date:  2018-01-17
*Description:  双向链表(C语言)实现
*Others:
**********************************************************************************/
#ifndef _LIST_H
#define _LIST_H

typedef int ElementType;

typedef struct __Node_t
{
	ElementType Element;
	struct __Node_t *pPrior;
	struct __Node_t *pNext;
}Node;

typedef int(*COMPARE)(ElementType, ElementType);

typedef void(*VISIT)(ElementType);

Node *CreateNode(ElementType element);

void DeleteNode(Node *pNode);

void InitList(Node *pHead);

int Empty(Node *pHead);

int ListLength(Node *pHead);

void ClearList(Node *pHead);

int InsFirst(Node *pHead, ElementType element);

int GetElem(Node *pHead, int iPos, ElementType *pElement);

int FindElem(Node *pHead, ElementType element, COMPARE compare);

Node *GetNodeInPosition(Node *pHead, int iPos);

int ListInsert(Node *pHe
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值