数据结构(王卓)

本文深入探讨了链表的几种类型,包括单链表、循环链表和双向链表,详细阐述了它们的基本概念、时间复杂度、操作方法以及在实际问题中的应用。特别地,提到了循环链表的合并技巧和双向链表的插入、删除操作。此外,还对比了链式存储结构与顺序表的优缺点,并分析了线性表在数据合并和有序表合并中的角色。最后,通过一元多项式运算和图书信息管理系统等案例展示了数据结构的实际运用。
摘要由CSDN通过智能技术生成

目录

2.5.3循环链表1

一.循环链表

1.循环链表基本概念

2.循环链表的时间复杂度

3.带尾指针循环链表的合并

2.5.4双向链表

一.双向链表

1.双向链表基本概念

2.双向链表的结构定义

二.双循环链表

1.双循环链表基本概念

​2.双向链表结构的对称性

三. 双向链表的操作

1.双向链表的插入操作

2.双向链表的删除

 三.单链表,循环链表和双向链表的时间效率比较

 2.6顺序表和链表的比较

一.链式存储结构的优缺点

 2.7线性表的应用

1.线性表的合并

 2.有序表的合并

 3.有序表合并——用链表实现

2.8案例分析与实现

1.一元多项式的运算:实现两个多项式加,减,乘运算

 2.稀疏多项式的运算

 3.图书信息管理系统

 3.1栈和队列的定义和特点

一.栈和队列的定义

1.定义

二.栈的定义和特点

 1.栈的特性

2.栈的特点

3.栈的相关概念

三.队列的定义和特点

1.队列的特性

2.定义


2.5.3循环链表1

一.循环链表

1.循环链表基本概念

(1)循环链表:是一种头尾相接的链表(即:表中最后一个结点的指针域指向头结点,整个链表形成一个环)

  • 优点:从表中任一结点出发均可找到表中其他结点

(2)循环链表的终止条件

由于循环链表中没有NULL指针,故涉及遍历操作时,其终止条件就不再像非循环链表那样判断p或p->next是否为空,而是判断他们是否等于头指针。

  • 循环条件:

2.循环链表的时间复杂度

3.带尾指针循环链表的合并

LinkList Connect(LinkList Ta,LinkList Tb){   //假设Ta,Tb都是非空的单循环链表
   p=Ta->next;                //p存表头结点
   Ta->next=Tb->next->next;    //Tb表头连结Ta表尾
   delete Tb->next;            //释放Tb表头结点
   Tb->next=p;                //修改指针
   return Tb;
}
  

2.5.4双向链表

一.双向链表

1.双向链表基本概念

双向链表:在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链,故称为双向链表。

2.双向链表的结构定义

typedef struct DuLNode{
   Elemtype  data;
   struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;

二.双循环链表

1.双循环链表基本概念

和单链表的循环类似,双向链表也可以有循环表

  • 让头结点的前驱指针指向链表的最后一个结点
  • 让最后一个结点的后继指针指向头结点

2.双向链表结构的对称性

 p->prior->next=p=p->next->prior

在双向链表中有些操作(如:ListLength,GetElem等),因仅涉及一个方向的指针,故他们的算法与线性链表的相同。但在插入,删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为O(n)

三. 双向链表的操作

1.双向链表的插入操作

 

void Listlnsert_Dul(DuLinkList&L,int i,ElemType e){
   //在带头结点的双向循环链表L中第i个位置之前插入元素e
   if(!(p=GetElemP_DuL(L,i)))return ERROR;
   s=new DuLNode;  s->data =e;
   s->prior=p->prior;  p->prior->next =s;
   s->next=p;  p->prior =s;
   return OK;
}//Listlnsert_DuL

2.双向链表的删除

void ListDelete_DuL(DuLink&L,int i,ElemType &e){
   //删除带头系欸但的双向循环链表L的第i个元素,并用e返回
   if(!(p=GetElemP_DuL(L,i))) return ERROR;
   e=p->data;
   p->prior->next=p->next;
   p->next->prior=p->prior;
   free(p);
     return OK;
}//ListDelete_DuL

 三.单链表,循环链表和双向链表的时间效率比较

 2.6顺序表和链表的比较

一.链式存储结构的优缺点

(1)链式存储结构的优点

  • 结点空间可以动态申请和释放;
  • 数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素

(2)链式存储结构的缺点

  • 存储密度小,每个结点的指针域需额外占用存储空间。当每个结点的数据域所占字节不多时,指针域所占储存空间的比重显得很大。

  • 链式存储结构是非随机存取结构。对任一结点的操作都要从头指针链查找到该结点,这增加了算法的复杂度。

二.顺序表和链表的比较

 2.7线性表的应用

1.线性表的合并

 2.有序表的合并

 

 3.有序表合并——用链表实现

2.8案例分析与实现

1.一元多项式的运算:实现两个多项式加,减,乘运算

 2.稀疏多项式的运算

 3.图书信息管理系统

 3.1栈和队列的定义和特点

一.栈和队列的定义

1.定义

(1)栈和队列是两种常用的,重要的数据结构

(2)栈和队列是限定插入和删除只能在表的“端点”进行的线性表

 

二.栈的定义和特点

 1.栈的特性

由于栈的操作具有后进先出的固有特性,使得栈成为程序设计中的有用工具。另外,如果问题求解的过程具有“后进先出”的天然特性的话,则求解的算法中也必然需要利用“栈”。

2.栈的特点

  • 栈是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。
  • 又称为后进先出的线性表,简称LIFO结构

3.栈的相关概念

(1)栈是仅在表尾进行插入,删除操作的线性表

(2)表尾(即an端)称为栈顶Top;表头(即a1端)称为栈底Base

 (3)插入元素到栈顶(即表尾)的操作,称为入栈

(4)从栈顶(即表尾)删除最后一个元素的操作,称为出栈

 

 (5)栈与一般线性表有什么不同

区别:仅在运算规则不同

三.队列的定义和特点

1.队列的特性

由于队列的操作具有先进先出的特性,使得队列成为程序设计中解决类似排队问题的有用工具。

2.定义

队列是一种先进先出的线性表。在表的一端插入(表尾),在另一端(表头)删除

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值