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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

大学计算机:教学课件:-数据结构常见算法.ppt

1、数据结构算法,数据结构,数据结构是一门研究非数值计算的程序设计问题中的操作对象(结点)以及它们之间关系和操作等的学科。1968 年克努思教授开创了数据结构的最初体系,他所著的计算机程序设计艺术第一卷基本算法是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。70 年代初,数据结构作为一门独立的课程开始进入大学课堂。下面介绍数据结构中常见的一些基本算法,关于算法线性表上的常见算法基于队列的常见算法基于栈的常见算法,数据结构常见算法,算法,多项式求的两种方法A(x)=anxn+an-1xn-1+a0A(x)=(anx+an-1)X+an-2)+a0,A(x)=anxn+an-1xn-1+a

2、0,templateT Poly1(T a,int n,T x)int i,j;T result=0;T xn,xx;for(i=0;in;i+)xn=1;xx=x;for(j=0;ji;j+)xn=xn*xx;result=ai*xn+result;return result;,A(x)=(anx+an-1)X+an-2)+a0,templateT Poly2(T a,int n,T x)int i,j;T result=0;T xn,xx;result=an-1;for(i=n-1;i0;i-)result=result*x+ai-1;return result;,线性表,设计一个时间复杂

3、度为O(n)的算法,实现将数组An中所有元素循环右移K个位置已知数组元素为整型,设计算法将其调整为左右两部分,左边元素为奇数,右边元素为偶数设单链表以非递减有序排列,设计算法,实现在单链表中删去系统的多余结点设单链表以非递减有序排列,设计算法,实现在单链表中删去系统的多余结点已知一个单链表中的数据元素含有三类字符:数字、字母和其他字符。编写算法,构造三个循环链表,使得每个循环链表中之包含同一类字符,返回,设计一个时间复杂度为O(n)的算法,实现将数组An中所有元素循环右移K个位置,算法分析kn。k=k%N,A,B(k=1),B(k=2),B(k=3),j=(i+k)%N,int i,j,n;i

4、nt*a;cinnk;k=k%n;a=new intn;for(i=0;i ai;for(i=0;in;i+)j=(i+k)%n;bj=ai;,时间复杂度?空间复杂度?,空间复杂度更少的方法,假设原数组序列为abcd1234,循环右移了4位数组序列为1234abcd。右移后,有两段的顺序是不变的:1234和abcd,可把这两段看成两个整体。右移K位的过程就是把数组的两部分交换一下。变换的过程通过以下步骤完成:1.逆序排列abcd:abcd1234 dcba1234;2.逆序排列1234:dcba1234 dcba4321;3.全部逆序:dcba4321 1234abcd。,更一般的情况:,根据

5、K%N的大小,将数据分成两段,第一段长度为N-K个数据,第二段中有K个数据然后分别将两段逆序,最后将整个数组逆序,void convert(int a,int start,int end)int k,temp;for(k=0;k(end-start+1)/2;k+)temp=astart+k;astart+k=aend-k;aend-k=temp;,void yiwei(int a,int n,int k)convert(a,0,k-1);convert(a,k,n-1);convert(a,0,n-1);,已知数组元素为整型,设计算法将其调整为左右两部分,左边元素为奇数,右边元素为偶数,算法

6、分析设计两个工作指针,分别指向数组的两端(I=0;j=n-1).然后,重复的进行以下工作:如果ij:从左向后扫描数组,直到遇到第一个偶数从右向左扫描数组,直到遇到第一个奇数如果ij 交换ai、aj的数据,同时修改i,j的值,继续进行2的工作,int n,*a;cinn;a=new int n;int i=0,j=n-1;for(i=0;iai;i=0;while(ij)while(ai%2=1)i+;while(aj%2=0)j-;if(ij)temp=ai;ai=aj;aj=temp;i+;j-,#include stdafx.h#include class changeprivate:in

7、t*a,length;public:change()coutlength;a=new intlength;coutai;,void trans()int i=0,j=length-1;int temp;while(ij)while(ai%2=1)i+;while(aj%2=0)j-;if(ij)temp=ai;ai=aj;aj=temp;i+;j-;return;,void display()int i=0;for(i=0;ilength;i+)cout ai;cout endl;int main(int argc,char*argv)change a;coutbefore change:;a

8、.display();a.trans();coutafter change:;a.display();return 0;,返 回,设单链表以非递减有序排列,设计算法,实现在单链表中删去系统的多余结点,基本思想:从头结点出发,进行链表的遍历,在遍历的过程中,设置两个工作指针p和q(q=p-next),比较p、q所指向的节点的值,如果相同,则删除q所指向的节点,,算法描述,设置工作指针p、q,并进行初始化:p=list.head-next;if(!p)return else q=p-next;在q!=NULL的情况下,重复进行以下工作:if(p-data=q-data)temp=q;p-next=

9、q-next;q=p-next;delete tempelse p=q;q=q-next;,template void DeleteSame(LinkList a)Node*p,*q,*temp;p=a.GetHead()-next;if(!p)coutnext;while(q)if(p-data=q-data)temp=q;p-next=q-next;q=p-next;delete temp;elsep=q;q=q-next;return;,判断带头节点的双循环链表是否对称,设置两个工作指针p=首元节点,q=尾节点,重复进行以下工作:比较p和q的值,如果不想等,停止比较,返回false如果相

10、等,观察p、q是否相邻(p-right=q,p-right-right=q),如果相邻,返回true,否则p=p-right,q=q-left,first,1.定义两个工作指针、,并进行初始化:=list.first-right;q=list.first-left;2.重复进行以下工作(while(1)if(p-data!=q-data return false;else if(p-right=q|p-right-right=q)return true;else p=p-right;q=q-left;,返 回,已知一个单链表中的数据元素含有三类字符:数字、字母和其他字符。编写算法,构造三个循环

11、链表,使得每个循环链表中之包含同一类字符,基本思想每个链表都带有头结点。原始链表为A,分类之后新增B,C,使得A存放字母,B存放数字,C存放其他字符基本过程:在A中进行遍历,并检查遍历到的符号,如果是字符,不做任何处理(继续后移指针);如果是数字,则将其采用尾插法加入到B中(继续后移指针),如果是第三类符号,则将其采用尾插法插入到C中(继续后移指针),算法分析,已知链表A,构造两个空循环链表B(数字),C(其他字符)设置工作指针p;p=A.first(头结点)定义一个辅助指针q,完成工作:q=p-next;如果q!=A.firstIsDigital(q-data),则将q从A中删除,并将其链入

12、B中temp=q;p-next=q-next,q=p-next;temp-next=B.first;B.rear-next=temp;B.rear=p;q-data 是其他字符,则将其从A中删除,并将其链入C中重复进行上述工作,直到A链表遍历结束,template struct NodeT data;Node*next;template class CycleListNode*head,*rear;int Length;public:CycleList()head=new Node;head-next=head;rear=head;CycleList(int n);void Display()

13、;Node*GetHead()return head;void append(Node*p);friend void Segment(CycleList a);,template void CycleList:append(Node*p)p-next=rear-next;rear-next=p;rear=p;return;,template CycleList:CycleList(int n)T input;Node*s;head=new Node;head-next=head;rear=head;Length=n;int i=0;for(i=0;iinput;s=new Node;s-dat

14、a=input;append(s);,template void CycleList:Display()Node*p;p=head-next;while(p!=head)cout datanext;coutendl;,template void Segment(CycleList A)Node*p,*q,*ahead,*temp;CycleList B,C;cout next;,template while(q!=ahead)if(q-data=0,int main(int argc,char*argv)CycleList A(10);A.Display();Segment(A);return

15、 0;,返 回,template while(q!=ahead)if(q-data=0,队列,求解素数环问题列车重排问题杨辉三角形,返回,求解素数环问题,问题描述:将n个自然数排成环,使得每相邻两数之和为素数,构成一个素数环。例子:1,2,3,4,7,10,9,8,5,6,求解思想,先将1放入素数环中。对2n之间的自然数组成对列,依次将元素出队,测试其是否与素数环中的最后一个数的和为素数,如成立,则将其加入素数环,否则,将其加入到对列中,等待再次处理重复2中操作,直到队列空,代码分析,public class PrimeRing public PrimeRing(int n)SeqList r

16、ing=new SeqList(n);ring.add(new Integer(1);LinkedQueue q=new LinkedQueue();for(int i=2;i=n;i+)q.enqueue(new Integer(i);,int i=0;while(!q.isEmpty()int k=q.dequeue().intValue();/出队 System.out.print(dequeue:+k+t);if(isPrime(ring.get(i)+k)i+;ring.add(new Integer(k);else q.enqueue(new Integer(k);System.out.println(素数环:+ring.toString();,返 回,判断一个正整数a是不是素数,只要将所有的小于等于根号a且大于1的素数都除不尽,则a就是素数。这是判断素数引理6 首先0和1不是素数、2是素数、能被2整除的不是素数,(素数肯定是奇数)排除这些数后然后对num进行开平方根,从3开始到这个平方根,每隔2判断一下(奇数肯定不能被偶数整除),看看num能否被其整除,如果能就不是素数,

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

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