ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:18.35KB ,
资源ID:21833079      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21833079.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法100题Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法100题Word文件下载.docx

1、 while (!isdigit(*s) s+; if (isdigit(*s) pcompare = s; while (isdigit(*s) clen+; if (clen llen) llen = clen; plong = pcompare; /clen = 0; clen = 0; for (i = 0; i llen; i+) outputstri = plongi; outputstri = ; return llen;int main() char instr = int len; char *out = instr; len = continuemax(out, instr

2、); printf(%d, %sn, len, out); return 0;/* 题目来自:* 题目14:输入一个已经按升序排列过的数组和一个数字,在数组中找出两个数,使的它们的和正好等于这个数字* 如1,2,4,7,11,15和数字15,则可以输出4和11* 方法:(可见编程之美) 初始化i,j分别指向数组开头和结尾,因为数组升序排列,则若arri+arrj大于输入数,则可以确定此刻的arrj必不满足条件,因为它与最小的数字相加* 都大于输入数,则可以缩小范围(j-),同理可以处理i直至满足条件。*/ 1 #include 2 3 void find(int *a, int len, in

3、t x) 4 5 int i, j; 6 for (i = 0, j = len - 1; j; ) 7 8 if (ai + aj = x) 9 10 printf(%d, %dn, ai, aj);11 return;12 13 else if (ai + aj x)14 j-;15 else 16 i+;17 18 printf(no such numsn);19 20 21 int main()22 23 int arr = 1, 2, 4, 7, 11, 15;24 int len = sizeof(arr) / sizeof(arr0);25 find(arr, len, 15);

4、26 return 0;27 * 题目54:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数数组位于数组的后半部分。* 可以借助快速排序中分成两个部分的思想:取数组中的一个数,移动元素使得数组前半部分的数小于基准数,后半部分大于基准数。* 用i标示当前元素,j标示最后一个为奇数的下标,若i处数为奇数,则与j+1处的数更换位置,更新i,j即可。 3 void swap(int *a, int i, int j) 5 int temp; 6 temp = ai; 7 ai = aj; 8 aj = temp; 9 10 11 void func(int *a, in

5、t n)12 13 int i, j;14 j = -1;15 for (i = 0; n;16 17 if (ai % 2 != 0)18 swap(a, +j, i);19 20 21 22 void print(int *a, int len)23 24 int i;25 for (i = 0; len;26 printf(%d , ai);27 printf(n28 29 30 int main()31 32 int arr = 3, 4, 98, 4, 3, 2, 77, 2, 25;33 int len = sizeof(arr) / sizeof(arr0);34 func(ar

6、r, len);35 print(arr, len);36 37 return 0;38 则输出为:3,3,77,25,4,2,98,2,4* 一个数组由一个递减数列左移若干位形成,如4, 3, 2, 1,6,5由6,5,4,3,2,1左移两位而成在这种数组中查找某一个数* 方法1:遍历数组查找次数,O(n)* 方法2:-* 设原数列为:a0,.,an,移位后形成的数列为:b0,.,bn,* 且有ai=bj,则满足j=(i+len-m)%len (m为移位位数)* 要求得某数位置,可先求得次数在原数列中的位置再按上面公式计算而来。* 可以先求出数列中的最大值,已知数列长度及递减步长,则可以求得

7、在原数列中的位置* 求最大数:* 1.先求步长,设为t* t = b1 - b0 if b1* 2.设b为按照b0为起始数,步长为t,长度为len的数列的最后一个数,则:* b = b0 + (len - 1) * t* 则数列中最大的数 max = blen-1 - b求数x在原数组中的位置:p = (x - max) / t* -*/ 1 /求得步长 2 int step(int *a, int len) 3 4 int t; 5 if (a0 a1) 6 t = a1 - a0; 7 if (a0 8 t = a0 - alen-1; 9 return t;10 11 12 int fi

8、nd(int *a, int len, int x, int step)13 14 int b, max, p, pr, m;15 16 b = a0 + (len - 1) * step;17 max = alen-1 - b;18 p = (x - max) / step; /原位置19 m = (a0 - max) / step; /移位位数21 pr = (p + len - m) % len;22 return pr;23 24 25 int main()26 27 int arr = 4, 3, 2, 1, 6, 5;28 int len = sizeof(arr) / sizeo

9、f(int);29 int p = find(arr, len, 1, step(arr, len);30 printf(%dn, p);31 32 return 0;33 1.什么是散列:一种高效的数据存储与检索技术,普通数组概念的推广,散列表不把关键值作为数组下标,而是通过设计好的散列函数,将关键值映射到数组下标范围内的一个索引值,通过这个索引值来完成对值的插入、查找、删除等操作。实际情况中,因为散列表的下标范围通常小于实际存储的数据量,所以难免出现不同的关键值散列到同一个索引位置的情况,这时就称发生了冲突,解决冲突可以通过两个方法来进行: 设计好的散列函数,能将关键字均匀的散列到表中;

10、采用某种冲突解决方法 2.散列函数简单一致散列假设:任何关键字散列到表中每个位置的可能性是相同的,且散列到某个位置的可能性与其他关键字是独立无关的将关键字转换为数字:为什么要这样做呢,因为计算索引值时通常是对数字来进行的,而关键字可能是字符串等复杂的数据结构,所以必须通过某种转换将其解释为数字来进行后续计算。 除法散列:h(k) = k mod m;其中m的选取很关键,m不宜为2的幂,常选取为与2的整数幂不太接近的常数 乘法散列: h(k) = m(kA mod 1) (小于此值的最大整数)m一般为2的某个幂,A是大于0小于1的某个常数 全域散列:在一组散列函数中随机的选取一个,使之独立于要存

11、储的关键字,随机化保证了没有哪一种输入会始终导致最坏情况性态,同时对于不同时刻的同一样的输入,每次执行时的性态也是不一样的 3.冲突解决链接法链接法中,当发生不同的关键字散列到同一个索引位置时,将其放到一个链表中,通过在链表头执行插入操作来进行。在简单一致散列假设下,采用链接法解决冲突的散列表一次不成功查找和一次成功查找的期望时间为O(1+a) (a=n/m一个链中平均节点数)开放寻址法在开放寻址法中,当到来一个对于某个关键字的某种请求时(插入、查找、删除),按照某散列函数计算的探测序列对表中的相应位置上的状态与请求进行匹配,当符合请求时,执行相应的操作。当执行查找时,在探测序列各节点上进行以下操作:若节点key与查找的key相同,则返回节点;若节点未存储元素,则返回;若以前存储过但已被删除,则探测下一个序列节点直到找到或为空。插入操作基于查找,对于查找返回的结果要么为空要么匹配到了,对于空的,则在此位置插入,匹配的则更新节点的属性。删除时不能直接删除查找到的元素,因为如果直接删除的话,如果后来到来一个查找操作,而此节点位置正好在探测序列上,探测在此处终止而无法对序列后续节点进行探测。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1