双向链表和循环双向链表的一些简单操作集
来源:互联网 发布:unity3d 游戏版本号 编辑:程序博客网 时间:2024/06/16 18:34
双向链表
- int inseser_debut_liste(Liste *list, int valeur) //插头
- int inseser_fin_liste(Liste *list, int valeur) //插尾
- int supprimer(Liste*list,int position) //删除
typedef struct Element{ int valeur; struct Element *suivant; struct Element *precedent;}Element;typedef struct Liste{ Element *tete; //头 Element *queue; //尾 int taille; //元素个数}Liste;int inseser_debut_liste(Liste *list, int valeur) //插头{ Element *p=malloc(sizeof(Element)); if(p==NULL) return -1; p->valeur=valeur; if(list->tete) list->tete->precedent=p; else list->queue=p; p->suivant=list->tete; list->tete=p; p->precedent=NULL; list->taille++; return 0;}int inseser_fin_liste(Liste *list, int valeur) //插尾{ Element *p=malloc(sizeof(Element)); if(p==NULL) return -1; p->valeur=valeur; if(list->queue) list->queue->suivant=p; else list->tete=p; p->precedent=list->queue; list->queue=p; p->suivant=NULL; list->taille++; return 0;}int supprimer(Liste*list,int position){ int k=1; if(list->nb==0||position<=0||position>list->taille) return -1; Element *p=list->tete; while(k<position) { p=p->suivant; k++; } if(p->precedent) p->precedent->suivant=p->suivant; else list->tete=p->suivant; if(p->suivant) p->suivant->precedent=p->precedent; else list->queue=p->precedent; list->taille--; free(p);}循环双向链表
建立哨兵sentinelle的双向列表
- T_list * Creer_list() //创建list
- void Inserer_Tete(T_list *l, int x) //插头
- void Inserer_Queue(T_list *l, int x) //插尾
- void Print_list(T_list *l)
- void Supprimer_Cellule(T_cell *c) //删除单元
- T_cell *Chercher_Val(T_list *l, int val) //查找
- void Supprimer_Val(T_list *l, int val)
- int Liste_Vide(T_list *l) //判断是否为空
Figure1:插头Figure2:插尾
typedef struct cellule{ int clé; struct cellule *succ; struct cellule *pred;}T_cell;typedef struct liste{ T_cell *sentinelle;}T_list;T_list * Creer_list(){ T_list *l; T_cell *c; l=(T_list *)malloc(sizeof(T_list)); c=(T_cell *)malloc(sizeof(T_cell)); l->sentinelle=c; c->pred=c; c->succ=c; return(l);}void Inserer_Tete(T_list *l, int x){ T_cell *c, *sentinelle; c=(T_cell *)malloc(sizeof(T_cell)); c->clé=x; sentinelle=l->sentinelle; c->succ=sentinelle->succ; c->pred=sentinelle; sentinelle->succ->pred=c; sentinelle->succ=c;}void Inserer_Queue(T_list *l, int x){ T_cell *c, *sentinelle; c=(T_cell *)malloc(sizeof(T_cell)); c->clé=x; sentinelle=l->sentinelle; c->succ=sentinelle; c->pred=sentinelle->pred; sentinelle->pred->succ=c; sentinelle->pred=c;}void Print_list(T_list *l){ T_cell *c; c=l->sentinelle->succ; while(c!=l->sentinelle) { printf("%d ",c->clé); c=c->succ; }}void Supprimer_Cellule(T_cell *c){ c->pred->succ=c->succ; c->succ->pred=c->pred;}T_cell *Chercher_Val(T_list *l, int val){ T_cell *c, *sentinelle; sentinelle=l->sentinelle; c=sentinelle->succ; while((c!=sentinelle)&&(c->clé!=val)) c=c->succ; if(c==sentinelle) return NULL; else return c;}void Supprimer_Val(T_list *l, int val){ T_cell *c; c=Chercher_Val(l,val); if(c!=NULL) { Supprimer_Cellule(c); free(c); }}int Liste_Vide(T_list *l){ return(l->sentinelle->pred==l->sentinelle->succ);}
阅读全文
0 0
- 双向链表和循环双向链表的一些简单操作集
- 带表 双向循环链表的简单操作
- 双向循环链表操作
- 双向循环链表操作
- 双向循环链表的简单实现
- 双向循环链表的基本操作
- 双向循环链表的操作源码
- 双向循环链表的基本操作
- 双向循环链表操作的实现
- 双向循环链表的基本操作
- 双向循环链表操作的实现
- 双向循环链表的基本操作
- 双向循环链表的基本操作
- 循环双向链表的基本操作
- 双向循环链表的操作
- 双向链表的一些操作
- 双向链表的一些操作
- “双向链表的一些基本操作”
- CentOS6.x安装Postgresql9.6
- 随笔
- LeetCode题解(4)--Median of Two Sorted Arrays
- HowTomcatWorks学习笔记--一个简单的Servlet容器
- MySQL数据库的优化
- 双向链表和循环双向链表的一些简单操作集
- C语言学习环境搭建
- 链表面试题(十一)---求带环单链表 环的入口点
- HDU 2859 简单DP
- java开发环境搭建
- tHackerrank Fight the Monsters!Week of Code 32
- CIDEr: Consensus-based Image Description Evaluation
- RocketMQ源码解析:Filtersrv
- Codeforces--808B