网站大量收购闲置独家精品文档,联系QQ:2885784924

充数据结构与算法.docVIP

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
充数据结构与算法

数据结构:数据结构是由一个逻辑结构 S 和 S 上的一个基本运算集△构成的整体( S ,△)。 数据结构的基本任务:数据结构的设计和实现。 数据的形式有很多种: ??? (1)for (i=0; in; i++) x++; 【解答】:时间复杂度为O(n)。 (2)for (i=0; in; i++) for (j=0; j=i; j++) x++; 【解答】:时间复杂度为O(n2)。 (3)i=1; while (in) i*=2; 【解答】:时间复杂度为O(log2n)。/*设k次,则2^k=n,所以k=log2n*/ 例:下列程序段的时间复杂性的量级为 。            for ( i=1 ;i=n;i++)    for ( j=i ;jn;j++)    t=t +1 ; 【分析】本题程序段中的执行频度最大的语句为双循环体内的 t=t+l ,它的执行频度为( n-1 ) + ( n-2 ) + … +2+1=n ( n-1 ) / 2 ,则 时间复杂性的量级为 O ( n 2 )。 【解答】: O ( n 2 ) (4)(矩阵的乘积) 【解答】:时间复杂度为O(n3)。 常见时间复杂性的量级有:常数阶 O ( 1 )(即算法的时间复杂性与输入规模 n 无关或 n 恒为常数)、对数阶 O ( log 2 n )、线性阶 O ( n )、平方阶 O ( n 2 )和指数阶 O ( 2 n )。 空间复杂性:主要关心一个算法除输入数据占用存储空间之外的附加存储空间的大小。(算法复杂度) 线性表:线性表L是指n个元素a1,a2,…,an组成的有限序列。记作:L=( a1,a2,…,an)。其中n=0,称为线性表的长度,简称表长。当n=0时线性表为空表,记作:L=()。元素ai-1称为ai的直接前趋,ai+1称为ai的直接后继。顺序表顺序表线性表的顺序存储结构是指在一个足够大的连续的存储空间里,将线性表中的元素按照逻辑上的次序依次进行存储。这样得到的线性表称为顺序表。顺序表的结构如下图所示: ??? 其中数组data[maxlen]用来存储线性表中的各个元素,此外,设置一个变量listlen表示顺序表中的元素个数(表长)。顺序表的类型定义如下:#define maxsize 100 //假设元素个数不超过100typedef struct { datatype data[maxsize]; //顺序表中元素的类型用datatype泛指? int last; //表长}sqlist; 由上述定义不难发现,顺序表具有这样的特点:逻辑上相邻的元素,其存储地址也相邻。顺序表中基本运算的实现1.初始化顺序表建立一个空的顺序表L,只需将表长置为0即可。void initiate(sqlist *L) { L-last=0; } 2.求表长即返回顺序表L的lst值。int length(sqlist L) { return (L.last); } 3.按给定序号取元素序号为i的元素ai在数组中的下标为i-1,若该元素存在,则返回相应的数组元素值。void get (sqlist L,int i, datatype *x){ if(i1 || iL.listlen)error(该元素不存在);? else *x= L.data[i-1]; } 4.查找(定位) locate(L,x):依次将顺序表L中的每个元素与给定的值x进行比较。若找到则返回其序号(下标+1),否则返回0。int locate (sqlist L, datatype x) { int i; ? for ( i=0; iL.listlen; i++) ?if (L.data[i]==x) return (i+1); ? return(0); } 5.插入 insert(L,i,x):算法思想如下:(1)首先要判断能否进行插入,即表是否为满以及插入位置i是否合理。(2)如果可以进行插入,需要执行下列步骤:为了给待插入元素x腾出一个空位,需要将ai~an往后移一位。将x插入到第i个位置上。插入后,顺序表L的长度lst要加1。void insert (sqlist *L, datatype x, int i ) { int j; ? if (i1 || iL-last+1) error (插入位置错误);? else if (L- last ==maxsize) error (溢出);???? ? else { for (j=L- last -1; j=i-1; j--) //往后移动元素????????? ??? L-data[j+1]=L-data[j]; ???????????????

文档评论(0)

技术支持工程师 + 关注
实名认证
文档贡献者

仪器公司技术支持工程师

1亿VIP精品文档

相关文档