[理学]第2讲 基本数据结构.ppt

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

第二讲 基本数据结构 线性表 定义:一个线性表是n个数据元素的有限序列 例如英文字母表(A,B,C,…..Z)是一个线性表 表元素插入运算 定义:线性表的插入是指在第k(0?k ? n)个元素之后插入一个新的数据元素x,使长度为n的线性表 表元素删除运算 定义:线性表的删除是指将第k(1?i ? n)个元素删除,使长度为n的线性表 C语法 数组定义 #define maxsize 1000 int data[maxsize]; 循环输入,输出 For(i=0;in;i++) scanf(%d,a[i]); For(i=0;in;i++) printf(%d ,a[i]); 课堂练习: 输入x,插入到数组a的i位置 判断数组a是否已达到maxsize 判断i位置是否合法 i位置合法进行插入 从i位置开始元素后移 插入元素 删除a数组i位置的元素 分析插入和删除一个元素操作的算法复杂度 算法时间复杂度T(n) 插入:O(n) 删除:O(n) 访问第i个元素:O(1) 按值查找:O(n) 故在顺序表中插入或删除一个元素时,平均移动表的一半元素,当n很大时,效率很低。 2.2.4顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 无须为表示表中元素之间的顺序关系增加额外的存储空间 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素(除操作在表尾的位置进行外) 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充 2.3 用指针实现表 2.3.1 用指针实现表的特点: 用一组任意的存储单元存储线性表的数据元素 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素 每个数据元素ak,除存储本身信息外,还需存储其直接后继的信息 结点 数据域:元素本身信息 指针域:指示直接后继的存储位置 实现 6、在位置k后插入元素x 函数的运算步骤是:先扫描链表找到插入位置p,然后建立一个存储待插入元素x的新结点y,再将结点y插入到结点p之后。 插入的示意图如下: 7、删除位置k处的元素给x 函数的运算步骤是:依次处理以下3种情况。 (ⅰ)k1或链表为空 (ⅱ)删除的是表首元素,即k=1 (ⅲ)删除的是非表首元素,即k1。其删除的示意图如下 ListItme ListDelete(int k, List L) { link p, q; ListItem x; int i; if (k 1 || ! L-first) Error(OutOfBounds ); p = L-first; if (k == 1) // 删除表首元素需要特殊处理 L-first = pnext; else {// 找表中第k-1个元素所在结点q q =L- first; for ( i = 1; i k - 1 q; i++) q = q-next; p = q-next; //让p指向 第k个元素所在结点 q-next = p-next;} // 删除结点p x = p-element; // 第k个元素存入x并释放结点p free( p ); return x; } 栈 栈是一种特殊的线性表,是操作受限的线性表, 称其为限定性数据结构。 栈的定义和特点 定义:限定仅在表首进行插入或删除操作的线性表,表首—栈顶,表尾—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 顺序栈的实现 #define maxsize 100 struct stack {elemtype a[maxsize]; int top;}; ADT栈上定义的常用的基本运算 判断栈空 判断栈满 返回栈顶元素 将元素x入栈 出栈,并将栈顶元素存入x中 课堂练习 Void inistack(stack s)//初始化栈 {s.top=-1;} bool fullstack(stack s)//判断栈是否满 {if (s.top=maxsize-1) return true; else return false;} bool emptystack(stack s)//判断栈是否为空 {if (s.top=-1) return true; else return false;} 请实现将元素x进栈 void push(stack s,int x) 判断是否栈满 修改栈顶指针 入栈 调用push,将多个元素入栈 取栈顶元素并输出 队列 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档