数据结构-----双向链表
2013-10-22 22:14
337 查看
#include <stdio.h> #include <stdlib.h> #include <malloc.h> // 双向链表的的结点定义 typedef struct Node { int elem ; struct Node * next ; struct Node * prior ; } Node ; // 双向链表定义 typedef struct DoubleLinkList { Node * head ; } DoubleLinkList ; // 初始化 void InitDoubleLinkList( DoubleLinkList * D ) { D->head = (Node*)malloc(sizeof(Node)) ; if( !D->head ) { printf("内存申请失败!") ; exit(0) ; } D->head->next = NULL ; } // 插入 void Insert( DoubleLinkList * D , int elem ) { Node * p = D->head ; while( p->next != NULL ) { p = p->next ; } Node * node = (Node*)malloc(sizeof(Node)) ; if( !node) { printf("内存申请失败!") ; exit(0) ; } node->elem = elem ; node->next = NULL ; node->prior = p ; p->next = node ; } // 删除 void Delete( DoubleLinkList * D , int elem ) { Node * p = D->head->next ; Node * q = p ; while( p->elem != elem ) { q = p ; p = p->next ; } q->next = p->next ; p->prior = q ; free( p ) ; } // 输出 void Print( DoubleLinkList * D ) { Node * p = D->head->next ; while( p != NULL ) { printf("%d " , p->elem ) ; p = p->next ; } } // 测试 int main() { DoubleLinkList D ; InitDoubleLinkList( &D ) ; Insert( &D , 5 ) ; Insert( &D , 3 ) ; Insert( &D , 8 ) ; Print( &D ) ; printf("\n") ; Delete( &D , 3 ) ; Print( &D ) ; printf("\n") ; return 0 ; }
相关文章推荐
- 算法导论第十章数据结构--双向链表
- 数据结构学习笔记三 循环链表及双向链表
- 数据结构:题目(1)二叉树转换为双向链表
- 数据结构-双向链表&双向循环链表
- 数据结构(四)双向链表的基本操作
- 数据结构的C实现_双向循环链表
- 【C++数据结构学习笔记---线性表】带头结点的双向循环链表
- 【数据结构】动态数组,数组链表,双向链表
- (8) Java源码分析 ---- LinkedList (对应数据结构中线性表中的双向循环链表,JDK1.6)
- 数据结构学习之双向链表结构
- 一步一步学数据结构之1--1(双向链表)
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 数据结构-带头结点带环的双向链表基本操作
- 数据结构-有头双向循环链表2(封装)
- 数据结构-内核的双向循环链表-简单实现
- Linux c 算法与数据结构--双向链表
- 简单数据结构之双向链表(C++实现)
- 数据结构也不是那么没意思之后序二叉树+二叉树转伪双向循环链表
- 【小镇的技术天梯】从头写数据结构,C语言实现双向链表
- 《数据结构》 循环链表和双向链表常用操作代码集合