陕西国际商贸学院数据结构第四章 线性表的链式存储(2).pdfVIP

  • 0
  • 0
  • 约4.89千字
  • 约 12页
  • 2019-05-05 发布于广东
  • 举报

陕西国际商贸学院数据结构第四章 线性表的链式存储(2).pdf

第四章 线性表的链式存储2(续) • 双向链表的基本算法实现 • 顺序存储与链式存储的比较 • 链式存储的应用举例 4.5 双向链表的基本算法实现 带头结点的双向链表: L ^ A 双向链表为“空”的条件: Head-next == NULL L ^ ^ 或者 Head-prior == NULL 带头结点的双向循环链表: 判断为空表的条件: Head-next == Head 或者 Head-prior == Head 特点:p-prior-next == p-next-prior == p 双向链表的C语言定义 • 双向环链表的数据定义: typedef int ElemType; //元素类型定义 typedef struct Dnode { //Dnode为结点类型预定义符 ElemType data; //数据域 struct Dnode *prior; //前驱指针域 struct Dnode *next; //后继指针域 } Dnode; //结点类型符 typedef struct { //定义一个双向链表的表结构 Dnode *head; //表头指针 Dnode *tail; //表尾指针 int length; // 当前表长度 } DLinkStruct, *DLinkList; //表结点类型和指针类型符 DLinkStruct DList; //定义一个双向链表为DList 的变量 带头结点的双向环链表(建空表) 1、构造一个空的双向链表(带头结点的双向链表) 参数采用变参专递要被初始化的表结构指针。 bool Init_DLinkList(DLinkList DL ) { DNode *p; p = (DNode *) malloc( sizeof(DNode) ); if (p == NULL ) return FALSE; p-next = NULL; p-prior=NULL; DL-head = p; DL-tail = p; DL-length = 0; return TRUE; } 调用方式:Init_DLinkList( DList ); // Dlist是一个双向链表的表结点 算法复杂度为:O(1) 。 带头结点的双向环链表(表头插入) 2、插入一个元素 (在双向链表的表头插入) bool Insert_First(DLinkList DL, ElemType x) // 双向表结构指针,待插元素值 { DNode *p; //定义临时的元素结点指针变量 p = ( DNode *)malloc( sizeof(DNode) ); // 动态分配一个结点存储空间 if (p==NULL )return FALSE; // 返回结点分配失败 p-data = x; // 给新结点的数据域填值 p-next

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档