- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性数据结构 为什么要学习数据结构? 什么是数据结构? 常用的数据结构有哪些? 线性数据结构: 线性表、栈、队列 为什么要学习数据结构? 问题:问从S到T的最大水流量是多少? 物理结构: 数据在计算机中的存储方式。 逻辑结构: 数据元素之间的逻辑关系。 物理结构: 1、顺序存储结构: 数组:物理存储结构相邻。 2、链式存储结构 : 指针(pointer)表示数据元素之间的逻辑关系 。物理存储结构中不一定相邻。 线性结构: 线性表、栈、队列 非线性结构:树、图 线性结构: 由n个数据元素组成的有限序列 除头元素外,每个元素都有唯一一个前趋 除尾元素外,每个元素都有唯一一个后继 26个英文字母表: a,b,……,z 100个同学的身高: 178 185 …… 189 班级考试成绩: 编号 姓名 语文 数学 1 张三 100 99 2 李四 99 99 …… 64 …… 线性表的两种存储方式 顺序存储结构:数组 连续存储 易于定位,不易于插入和删除 链式存储结构:链表(指针) 非连续存储 易于插入和删除,不易于定位 数组与链表 数组基本操作: 链表的操作: 分析: 所有的账单用数组a保存。 奖金总额 sum。 每天找出最大的max=a[i]的和最小的min=a[j],在原来位置删除他们。 Sum=sum+max-min 在递增序列 3 6 …40 … 90,100,110…… 200, 300,340 中查找50的位置。 Procedure insert(x) begin j:=n; a[0]:=x; //a[0]:哨兵;x最小时,防止向前溢出 while a[0]a[j] do begin a[j+1]:=a[j]; //元素后移 dec(j); end; a[j+1]:=a[0]; //在j+1位置插入x inc(n); End; 3、归并排序算法 归并排序的基本思想是: 将两个或两个以上的有序子序列“归并”为一个有序序列。 二路归并排序算法: 算法描述: procedure mergesort(s,t:integer); //对a[s..t]进行二路归并排序 var m:integer; begin if st then //一个元素不需要再排序 begin m:=(s+t) div 2; mergesort(s,m); //递归左边 mergesort(m+1,t); //递归右边 merge(s,m,t);// 合并有序的a[s..m]和a[m+1..t] end; end; procedure merge(s,m,t:integer); //借助辅助数组b,把有序的a[s..m]和a[m+1..t]合并为有序的a[s..t] var i,j,k:integer; begin i:=s; j:=m+1; k:=s-1; while (i=m)and (j=t) do begin inc(k); if a[i]=a[j] then begin b[k]:=a[i];i:=i+1 end else begin b[k]:=a[j];j:=j+1 end end; while i=m do begin inc(k); b[k]:=a[i];inc(i); end; while j=t do begin inc(k); b[k]:=a[j];inc(j); end; for i:=s to t do a[i]:=b[i];//把b[s..t]复制到a[s..t] end; Mergesort(1,n); 时间复杂度:O(n*log(n)) 使用一个辅助数组 二、栈 栈的定义 栈是一种“后进先出”的线性表。 对它的插入和删除都限制地表的同一端进行,这一端叫做栈的“顶”。另
文档评论(0)