双向链表代码实例

一个双向链表的实例,把数据封装在结构中的data指针中,是的链表和数据各自独立。

.h file

#ifndef ListOper_H  
#define ListOper_H 

#include<malloc.h>  
#include<stdlib.h>  
//--------------data结构体-------------------------
typedef struct struct_data {
	int id;
	char name[20];
	char src[80];		
	char dst[80];		
}S_XXX;
//--------------data结构体-------------------------

/*数据置零*/
void ZeroXXX(S_XXX *pData);

/*数据拷贝,每次使用前调用ZeroCDR函数,确保字符串以nul结束*/
void CopyXXX(S_XXX *pData, S_XXX *pSrc);

/*构造cdr数据:pData为NULL时,各成员初始化为空;非NULL时,拷贝pData。*/
S_XXX * MakeXXX(S_XXX *pData);

//--------------List结构体-------------------------
typedef void * Item; 
typedef struct Node * PNode;  

/*定义节点类型*/  
struct Node
{  
    Item  data;  //data;      /*数据域*/  
    PNode previous; /*指向前驱*/  
    PNode next;     /*指向后继*/  
};  

/*定义链表类型*/  
typedef struct  
{  
    PNode head;     /*指向头节点*/  
    PNode tail;     /*指向尾节点*/
    int size;  		/*指向链表节点个数,不包含head节点*/
}DList;  
//--------------List结构体-------------------------

/******************************Oper Start*****************************/
/*分配值为i的节点,并返回节点地址*/  
PNode MakeNode(Item data, int flag);

/*释放p所指的节点*/  
void FreeNode(PNode p);  

/*构造一个空的list双向链表*/  
DList* InitList(int flag);

/*摧毁一个双向链表*/  
void DestroyList(DList *plist);   
 
/*将一个链表置为空表,释放原链表节点空间*/  
void ClearList(DList *plist);  
  
/*返回头节点地址*/  
PNode GetHead(DList *plist);  
 
/*返回尾节点地址*/  
PNode GetTail(DList *plist);  
  
/*返回链表大小*/  
int GetSize(DList *plist);   
 
/*返回p的直接后继位置*/  
PNode GetNext(DList *plist, PNode p); 
 
/*返回p的直接前驱位置,前驱为head则指向tail*/  
PNode GetPrevious(DList *plist, PNode p); 
  
/*返回p的直接前驱位置*/  
PNode GetPrevious2(DList *plist, PNode p); 

/*将pnode所指节点插入第一个节点之前*/  
PNode InsFirst(DList *plist,PNode pnode);  
 
/*将链表第一个节点删除并返回其地址*/  
PNode DelFirst(DList *plist);   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值