关于双向链表的理解
来源:互联网 发布:versions for mac过期 编辑:程序博客网 时间:2024/05/20 16:13
关于双向链表的理解
参考书籍:算法精算
今天学习之前找了下双向链表和单向链表的区别(如下图)。
双向链表的定义:
1、链表元素的定义:
typedef struct DListElmt_ {void * data;struct DListElmt_ * next; struct DListElmt_ * prev;}DListElmt;
2、链表的定义:
typedef struct Dlist_{int size;DListElmt * head;DListElmt * tail;void (* destroy)(void *data);int (*match)(const void *key1,const void *key2);}DList;
双向链表的编程构思
1、双向链表的next插入(prev插入类同)
①、判断链表是否插入目标元素为NULL且链表不为空链
②、针对空链表的插入
③、针对非空链表的插入(这里要考虑目标元素下一个元素是否为NULL,这关系到尾结点的管理)
程序实现:
int dlist_ins_next(DList *dlist,DListElmt *element,const void*data){DListElmt * new_element;if(element==NULL&&dlist->size!= 0)return -1;if((new_element=(DListElmt*)malloc(sizeof(DListElmt)))==NULL)return -1;new_element->data=(void *)data;if(dlist->size==0){dlist->head=new_element;dlist->head->next=NULL;dlist->head->prev=NULL;dlist->tail=new_element;}else{new_element->next=element->next;new_element->prev=element;if(element->next == NULL)dlist->tail=new_element;elseelement->next->prev=new_element;element->next=new_element;}dlist->size++;return 0;}
2、双向链表的删除
①、判断目标元素是否为NULL或链表是否为空
②、判断目标元素是否为结头
a、是结头考虑删除后结头是否为NULL(这关系到结尾的管理)
b、不是结头删除并考虑结尾的管理
int dlist_remove(DList * dlist,DListElmt * element,void **data){if( (dlist->size == 0)||(element == NULL) )return -1;*data=element->data;if(element == dlist->head){dlist->head=element->next;if(dlist->head==NULL)dlist->tail=NULL;else element->next->prev=NULL;}else{element->prev->next=element->next;if(element->next==NULL)dlist->tail=element->prev;elseelement->next->prev=element->prev;}free(element);dlist->size--;return 0;}这只是学习后的一些总结,若有不足请指出,谢谢!
0 0
- 关于双向链表的理解
- 关于把二元查找树变成排序的双向链表算法的理解
- 双向链表插入结点的理解。
- 关于剑指offer上“二叉搜索树与双向链表”题的理解
- 关于双向链表
- 关于双向链表的创建 poj3750
- 关于双向链表的一些分析
- 关于通用双向链表的使用
- 关于双向链表的建立
- 关于双向链表的审计 audit
- 关于双向链表的操作详解
- 理解Linux双向链表
- 【Redis】对通用双向链表实现的理解
- 关于循环双向链表
- 关于双向链表插入节点的问题
- 关于可控大小的双向循环链表
- 关于双向链表的相关一系列操作(作为备忘)
- 关于 双向循环链表 的一些基础程序
- 满足条件的整数
- 数据挖掘基础知识-矩阵(分解)
- 计算机原理学习 -- 操作系统发展和程序编译
- 《云计算架构技术与实践》连载18:2.4.3 IDC托管云
- OJ刷题之《函数模板--求n个数之和》
- 关于双向链表的理解
- hdu1506 Largest Rectangle in a Histogram (单调栈)
- UI:UIToolBar的使用
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- Android OTA查分包打包方法
- 2014_12_27_topo_related_problems
- 18周oj函数f(m,n)的计算
- javascript实现漏斗案例
- 《云计算架构技术与实践》连载19:2.4.4 企业私有云