数据结构第2章线性表资料.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 线性表;本 章 主 要 内 容;提问: 数据结构研究的三方面? 接下来从这三方面来介绍线性表,简单介绍逻辑结构,重点介绍线性表的两种存储结构和基本运算。 提问:存储结构有哪两种? 顺序存储结构——用数组实现。 链式存储结构——用指针实现,动态分配存储空间。 如:存储10个整数。;如:存储10个整数。 (1)顺序存储 int a[10]; (2)链式存储 动态分配空间,用malloc函数 struct node { int data; struct node *next; };线性结构的特点:“一对一”,“一个接一个的排列” 线性表的例子: ①学生信息表 ②一个字符串 线性表——具有相同数据类型的n(n=0)个数据元素的有限序列,通常记为: (a1,a2,… ai-1,ai,ai+1,…an) 其中n为表长, n=0 时称为空表。;线性表的基本运算:插入、删除、查找 线性表按存储结构分类: (1)顺序表 (2)链表;2.1 线性??的顺序存储结构;编程:输入一组整数(以-1结束)并输出。 采用顺序存储: #define MAXSIZE 100 int data[MAXSIZE]; void input( ) //输入 { scanf(“%d”,x); int i; while(x!=-1) { data[i]=x; i++; scanf(“%d”,x); } } void print( ) //输出 { for(i=0; ? ;i++) printf(“%5d”, data[i]); };SeqList L; //定义一个顺序表 L L.last存放最后一个元素的下标,则表长为L.last+1 L.data[ ]存放各元素,为:L.data[0], …… , L.data[L.last];2.1.2 顺序表的基本运算 初始化、建立、输出、插入、删除。 1、顺序表的初始化(即:构造一个空表) void Init_SeqList(SeqList *L) { L - last=-1; } 2、建立一个顺序表(输入一组整数,存入顺序表L中) void Create_SeqList(SeqList *L) { int i; datatype x; scanf(“%d”,x); i=0; while(x!=-1) { L - data[i]=x; i++; scanf(“%d”,x); } L - last=i-1; } ;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;2.1 线性表的顺序存储结构;练习: (1)在一个长度为n的顺序表的第i个元素之前插入一个新元素,需后移________个元素。 (2)将一个长度为n的顺序表的第i个元素删除,需移动________个元素。 思考: (1)在一个递增有序的顺序表 L中插入元素x后仍有序。 (2)将顺序表 L中的元素逆置。 实验1:顺序表;2.1.3 顺序表应用举例 P17 【例2-4】将两个递增有序的顺序表A和B合并成一个递增有序的顺序表C。 如:A=(3,5,8,11) B=(2,6,9,15,20) 合并后:C=(2,3,5,6,8,9,11,15,20) 算法思想: 从第一个元素开始,依次比较A、B表中相应元素,将较小者赋给C表。 设两个“指针”i和j分别指向A、B表中某个元素。若i所指元素≦j所指元素,则将i所指元素赋给C,且让i指向A下一个元素;否则,将j所指元素赋给C,让j指向B下一个元素。 (注意:i, j并非指针变量,而是整型变量,其值为所指元素下标,我们只是将其理解成“指针”,故i所指元素就是以i为下标的元素,即A.data[i]);反复执行,直到A或B表中的元素全部合并完; 然后再将另一个表的剩余元素依次赋给C。 算法:《教材》P17 void Merge(SeqList a, SeqList b, SeqList *c) { int i,j,k; i=j=k=0; };算法的时间复杂度分析: 设A表有m个元素,B表有n个元素,基本操作是比较和赋值。 每比较一次,就将一个元素赋给C。A、B共有m+n个元素,故需赋值m+n次,最多需比较m+n-1次。;顺序表(顺序存储结构)的优缺点 (1)优点 逻辑上相邻的元素,物理位置也相邻。 可随机访问。 (2)缺点 插入、删除操作需要移动大量的元素,效率低。 需要预先分配足够大的存储空间。;

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档