0401数据结构压缩版01V1.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
0401数据结构压缩版01V1

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 顺序表的删除:删除表中第i个位置的元素。 实现步骤: 判断i是否超过当前表的长度; 取出欲删除元素 将该位置后的元素依次向前移动一个位置; 修改当前表的长度 * * 2.4 顺序表的操作(续3) /*在顺序表中删除第i个元素*/ int ListDelete_sq(Sqlist *L,int i){ int k; if(i1||iL-length) return ERROR; /*删除位置不合法*/ for(k=i-1;kL-length-1;k++) /*元素前移*/ L-slist[k]=L-slist[k+1]; L-length--; /*顺序表长度减1*/ return OK; } 顺序表的插入、删除算法分析:在顺序表中插入和删除元素,其时间耗费主要在元素的移动上。 * * 2.4 顺序表的操作(续4) ? 在第i个元素前插入一个新元素,移动元素次数为: n-i+1 平均移动次数 ? 删除第i个元素,移动元素次数为: n-i 平均移动次数 时间复杂度:O(n) 顺序表的查找:在顺序表中查找某个值等于给定值的元素位置。 实现步骤: 从顺序表的起始位置开始依次比较; 若找到对应的元素,则返回该元素在表中的位置; 若找到表的末尾位置,还未找到,则返回失败标识。 顺序表的特点: 简单直观,容易理解; 能够实现随机存取; 插入和删除需要移动大量的数据元素; 长度相对固定,易导致存储空间的浪费; * * 2.4 顺序表的操作(续5) 链表:采用一组任意的存储单元来存放线性表中的数据元素,这些存储单元可以是连续的,也可以是不连续的。数据元素间的逻辑关系通过附加信息-指针来描述。 数据元素除了具有代表其本身信息的数据域外,还有一个用来指示逻辑关系的指针域。这样的存储方式称为结点。 链表的实现主要使用结构体: * * 2.5 线性表的链式表示 数据域 data 指针域 next 结点node typedef struct LNode{ ElemType data; /*结点的数据域*/ struct LNode *next;/*结点的指针域*/ }LNode,*Llist; 若LNode *p,则p的含义是什么? 若 p 的值非空,则表明 p 指向某个结点,p-data 表示 p 所指结点中的数据域,p-next表示 p 所指结点中的指针域,若非空,则指向其后继结点。   线性链表是一种动态存储结构,当线性链表要增加一个结点时,向系统申请一个存储空间,删除结点时要将空间释放。 单链表:结点中只有一个指针域 * * 2.5 线性表的链式表示(续1) p=(LNode *)malloc(sizeof(LNode)); free(p); 不带头结点的单链表,头指针指向第一个数据元素 带头结点的单链表,头指针指向头结点,头结点的数据域为空,指针域为第一个数据元素的地址 不带头结点的单链表为空,则头指针为空,而带头结点的,则头结点的指针域为空 单向循环链表的特点:表中最后一个结点的指针域指向头结点,整个链表成为一个由链指针相链接的环,并且将头指针设成指向最后一个结点。空的循环链表由只含一个自成循环的头结点表示。 问题: 判断有头结点的循环链表是否到达表尾的条件是什么? 判断循环链表为空的条件是什么? * * 2.5 线性表的链式表示(续1) 头结点 空表 ... H H 非空循环链表 双向循环链表的特点是其结点结构中含有两个指针域,一个指向其直接后继,一个指向其直接前趋。 循环链表可以看做?环形 * * 2.5 线性表的链式表示(续2) 单链表:建立一个空的线性链表。对于带头结点的单链表,设定一个头指针指向头结点。并且设置头结点的指针域为空。 * * 2.6 链表的创建(续2) Llist InitList_l(Llist H) { H=(Lnode *)malloc(sizeof(LNode)); /*申请一个头结点*/ if (!H) return ERROR; /*申请失败*/ H-next=NULL; /*头结点的指针域置空*/ return H; } LNode *create_list(int n){ LNode *head,*p,*q; int i;

文档评论(0)

173****7830 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档