- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)缺点
插入、删除操作需要移动大量的元素,效率低。
需要预先分配足够大的存储空间。;
您可能关注的文档
- 人民医院病房楼装修改造工程施工组织设计方案资料.doc
- 人民医院消防安全整改工程施工方案资料.doc
- 油品车间事故处理预案材料.doc
- 填充墙植筋施工方案资料.doc
- 第五章数字媒体及应用综述.ppt
- 内部客户关系及服务意识资料.ppt
- 社会保险和商业险知识培训资料.ppt
- 数据的加工与表达资料.ppt
- 内部控制制度-公司层面控制资料.doc
- 伏安法测电阻率探析.ppt
- 初中语文经典古文教学的有效性分析教学研究开题报告教学研究课题报告.docx
- 初中语文筛选与分析课文的方法探讨教学研究课题报告.docx
- 高中生物课程改革的挑战与对策教学研究课题报告.docx
- 高中生创造性思维训练的途径教学研究课题报告.docx
- 高中生科学实验报告写作的指导方法教学研究课题报告.docx
- 高中物理教学中概念图的应用实证研究教学研究课题报告.docx
- 教师情绪管理对教学效果的影响研究教学研究课题报告.docx
- 教师在课堂观察中的有效反馈机制研究教学研究课题报告.docx
- 初中生学习方式的变迁与教育应对教学研究课题报告.docx
- 初中生自我管理能力培养的研究教学研究课题报告.docx
文档评论(0)