数据结构第二章.doc_第1页
数据结构第二章.doc_第2页
数据结构第二章.doc_第3页
数据结构第二章.doc_第4页
数据结构第二章.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 线性表(Linear List)| 逻辑结构及其基本操作| 线性表的顺序存储结构| 线性表的链式存储结构| 静态链表| 应用实例逻辑结构及其基本操作| 定义:由n个相同类型数据元素a0 a1aian-1 构成的有限序列。z 说明:ai是抽去现实意义的抽象表示符号。typedef int DataType;typedef char DataType;typedef struct student DataType;| 基本操作初始化:Initiate(L) 求长度:ListLength(L) 前插:ListInsert(L,i,x)删除:ListDelete(L,i,x)取元素:ListGet(L,i,x)注:L为线性表| 顺序存储结构:用一组地址连续的存储单元依次存储线性表的各个元素。 线性表的定义:#define MaxSize 1024 /假定线性表的最大长度为1024typedef int DataType; /*定义数据类型*/typedef struct DataType ListMaxSize; int size;SeqList;M注意:这样定义不能对size进行初始化,因此一定要在使用前进行初始化赋值。 | 线性表元素的插入 | 线性表元素的删除 小结:很显然,顺序表的插入和删除一个元素时,其时间主要花费在移动数据元素上。算法的代价分析:插入 删除平均移动结点的次数: 同理可得:E= E=假设结点插入的概率相同,即 Pi=把Pi代入E的计算公式中,则有:E=所以,在顺序表上插入和删除一个元素的时间复杂度是:(n)。 对于取元素和定位操作可以直接实现。| 例:利用线性表的基本运算实现清除L中多余的重复节点。 | 顺序表的优点:简单、常用。无须为表示节点间的逻辑关系而增加额外的存储空间可以方便的随机存取表中的任一节点| 顺序表的缺点插入和删除运算时,需移动大量数据,运行速度受到影响。需预先确定数据元素最大个数。| 线性表的链式存储| 链表(Linked List):一种物理存储上非连续、非顺序的线性存储结构,数据元素间的逻辑顺序是通过链表中的指针链接次序实现的。| 节点构成:数据域指针域| 单链表结点的定义typedef struct Node DataType data; struct Node *next; SLNode;| 单链表的结点结构的定义()一般形式的单链表存储结构的结点定义方法 typedef struct Node DataType Data; struct Node *Next SLNode;|typedef int datatype;typedef struct char name10;int age; DataType;节点存储空间的申请 p(SLNode *)malloc(sizeof(SLNode);节点存储空间的释放 free(p);| 单链表中的基本操作初始化int ListInitiate(SLNode * *head) if (*head = (SLNode *)malloc(sizeof(SLNode) = NULL) return 0;用头指针建立了一个空表。(*head) - Next = NULL;return 1; | 单链表中的基本操作前插在单链表h中的第i个元素之前插入一个数据元素x。int ListInsert (SLNode *head, int i , DataType x)SLNode *p,*q;int j;p = h;j = 0;while( p != NULL & j Next;j + +; if (j != i-1) printf(“n插入位置不合理! ”); return 0; /*申请一空结点*/if (q =(SLNode *)malloc(sizeof(SLNode) = =NULL) return 0;q - Data = x; /*给数据赋值*/q - Next = p - Next;p - Next = s;return 1;| 单链表中的基本操作删除在单链表h中删除第i个结点。| 单链表中的基本操作取元素在单链表h中寻找第i个结点,并返回该结点的数据元素。| 单链表中的操作举例 假设已有单链表la,复制一个具有同样结构的单链表lb。 | 循环单链表循环单链表的定义:循环单链表是单链表的另一种形式,其特点是链表中最后一个结点的指针不再是空的,而是指向头结点或第一个结点,整个链表形成一个环。从表中任一个结点出发,都可找到表中其它结点。| 双向链表双向链表的定义:具有两个方向的指针域的链表叫双向链表,这两个指针域分别指向当前结点的前驱和后继。单链表只能从表头开始沿一个方向查找;而双向链表可以从任一个结点出发,向前或向后查找 。| 双向链表结点的结构定义typedef struct NodeDataType Data;struct Node * Prior,* Next; DLNode; 双向链表前插操作的C语言算法 P-49| 双链表中的基本操作删除 双向链表删除操作的C语言算法 p-50 | 链式存储结构的特点链式存储结构的优点 (1) 结点空间的动态申请和动态释放; (2) 数据元素的逻辑次序用结点的指针域指示,插入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论