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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构学习笔记.docx

1、数据结构学习笔记一、数据结构算法实现1、排序算法集锦1、直接插入排序:代码:/插入排序。/时间复杂度:O(n)。空间复杂度:O(1)。为稳定排序。#include#includevoid InsertSort(int a,int n)/对顺序表做直接插入排序。intj,k;for(j=2;j=n;j+) if(ajaj-1)/,需将其插入顺序表。 a0=aj;/复制为哨兵。aj=aj-1;for(k=j-2;a0ak;k-) ak+1=ak;/记录后移。 ak+1=a0; /插入到正确位置。 int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);sca

2、nf(%d,&n);printf(请输入这n个数:n);for(i=1;i=n;i+)scanf(%d,&ai);InsertSort(a,n);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause); 数据测试:2、折半插入排序代码:/折半插入排序。/时间复杂度:O(n)。空间复杂度:O(1); #include#includevoid BInsertSort(int a,int n)/对顺序表做折半插入排序。intj,k;for(j=2;jn;j+)a0=aj;int low=1,high=j-1;

3、while(low=high)/在alow.high中折半查找正确插入位置。int m=(low+high)/2;if(a0=high+1;k-)/记录后移。ak+1=ak; ahigh+1=a0;/插入。 int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);scanf(%d,&n);printf(请输入这n个数:n);for(i=1;i=n;i+)scanf(%d,&ai);BInsertSort(a,n);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause

4、); 数据测试:3、希尔排序:代码:/希尔排序。/时间复杂度:O(nlogn)。空间复杂度:O(1)。为不稳定算法。#include#includevoid ShellInsert(int a,intn,intdk)/对顺序表a做一趟希尔插入排序。intj,k;for(j=dk+1;j=n;j+)if(aj0&a0ak;k-=dk)ak+dk=ak; ak+dk=a0; void ShellSort(int a,intn,intdlta,int t)/按增量序列dlta对顺序表做希尔排序。int m;for(m=0;mt;m+)ShellInsert(a,n,dltam);int main()

5、int a100,dlta20,n,t,i;printf(请输入要进行排序的数的个数n:n);scanf(%d,&n);printf(请输入这n个数:n);for(i=1;i=n;i+)scanf(%d,&ai);printf(请输入增量序列数的个数t:n);scanf(%d,&t);printf(请输入增量序列:n);for(i=0;it;i+)scanf(%d,&dltai);ShellSort(a,n,dlta,t);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause);数据测试:4、冒泡排序代码

6、:/起泡排序。/时间复杂度: O(n2)。空间复杂度:O(1)。为稳定排序算法。#include#includevoidBubbleSort(int a,int n)inti,j,temp;for(i=1;i=n-1;i+)for(j=1;jaj+1)temp=aj;aj=aj+1;aj+1=temp; int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);scanf(%d,&n);printf(请输入这n个数:n); for(i=1;i=n;i+)/注意数组的起始位置。scanf(%d,&ai);BubbleSort(a,n);printf(排序后的

7、n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause); 数据测试:5、快速排序:代码:/快速排序。/时间复杂度:O(nlogn)。空间复杂度:O(logn)。为不稳定算法。#include#includeint Partition(int a,intn,intlow,int high)/返回枢轴所在位置。intpivotkey;a0=alow;pivotkey=alow;while(lowhigh)while(lowpivotkey)high-;alow=ahigh;while(lowhigh&alowpivotkey)lo

8、w+;ahigh=alow; alow=a0;return low;void QuickSort(int a,intn,intlow,int high)/递归形式快排。intpivotloc;if(lowhigh)pivotloc=Partition(a,n,low,high);QuickSort(a,n,low,pivotloc-1); QuickSort(a,n,pivotloc+1,high); int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);scanf(%d,&n);printf(请输入这n个数:n); for(i=1;i=n;i+)/注

9、意数组的起始位置。scanf(%d,&ai);QuickSort(a,n,1,n);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause); 数据测试:6、简单选择排序代码:/简单选择排序。/时间复杂度:O(n2)。空间复杂度:O(1)#include#includeintSelectMinKey(int a,intn,int i)intj,min;min=i;for(j=i+1;j=n;j+)if(ajamin)min=j; return min;voidSelectSort(int a,int n)i

10、nti,j,temp;for(i=1;in;i+) j=SelectMinKey(a,n,i); if(i!=j)temp=ai;ai=aj;aj=temp; int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);scanf(%d,&n);printf(请输入这n个数:n); for(i=1;i=n;i+)/注意数组的起始位置。scanf(%d,&ai);SelectSort(a,n);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause);数据测试:7、堆排序代

11、码;数据测试:8、归并排序代码:/归并排序。/时间复杂度:O(nlogn)。空间复杂度:O(n)。#include#includevoid Merge(int SR,int TR,intn,inti,intm,int t) /将有序的ai.m和am+1.t合并为有序的TRi.t。intj,k;for(j=m+1,k=i;i=m&j=t;k+)if(SRi=SRj)TRk=SRi+;else TRk=SRj+; if(i=m)while(i=m)TRk+=SRi+; if(j=t)while(j=t)TRk+=SRj+; voidMSort(int SR,int TR,intn,ints,int

12、 t) /将 SRs.t归并排序为TRs.t。int m,TR1100;if(s=t)TRs=SRs;else m=(s+t)/2;MSort(SR,TR1,n,s,m);/递归地将SRs.m归并为有序的TR1s.m。MSort(SR,TR1,n,m+1,t);/递归地将SRm+1.t归并为有序的TR1m+1.t。 Merge(TR1,TR,n,s,m,t);/将TR1s.m、TR1m+1.t归并到TR1s.t; voidMergeSort(int a,int n)MSort(a,a,n,1,n);int main()int a100,n,i;printf(请输入要进行排序的数的个数n:n);

13、scanf(%d,&n);printf(请输入这n个数:n); for(i=1;i=n;i+)/注意数组的起始位置。scanf(%d,&ai);MergeSort(a,n);printf(排序后的n个数是:n);for(i=1;i=n;i+)printf(%4d,ai);printf(n);system(pause);数据测试:2、链表与数组1、假定数组AN的n个元素中有多个零元素,编写算法将A中所有的非零元素依次移到A的前端。【华中科技大学,06年】代码:#include#includeint main()int a100,n,i;while(1)printf(please input th

14、e number of the array:n);scanf(%d,&n);printf(please input every value in the array:n);for(i=0;in;i+)scanf(%d,&ai);int p=-1,q=0,m=0;for(i=0;i0&q0) ap=ai;/移动非零元素至前面。 /ai=0; q-;/零元素个数减1。if(q0)p+; else if(m0)ai-m=ai; printf(the values after removing:n);for(i=0;in;i+)printf(%4d,ai);printf(n);system(pause

15、); 数据测试:2、顺序存储的线性表,其数据元素为整型,试编写一算法,将A拆分成B和C两个表,使A中的元素值大于等于0的存入B,小于0的存入C中。要求:(1)表B和C另外设置存储空间。 (2)表B和C不另外设置,而利用A的空间。(1)代码:#include#includeint main()int A10=1,2,3,-4,-7,5,7,-9,8,-2;int B10,C10;inti,j,k; i=j=k=0;for(i=0;i=0)Bj+=Ai;else Ck+=Ai;printf(拆分前:n);printf(A:);for(i=0;i10;i+)printf(%4d,Ai);printf

16、(n);printf(拆分后:n);printf(B:);for(i=0;ij;i+)printf(%4d,Bi);printf(n);printf(C:);for(i=0;ik;i+)printf(%4d,Ci);printf(n);system(pause);数据测试:(2)代码:#include#includeint main()int A10=1,2,3,-4,-7,5,7,-9,8,-2;int i=0,j=9,temp,t=0; printf(拆分前:n);printf(A:);for(t=0;t10;t+)printf(%4d,At);printf(n);while(i=0)i+

17、;while(Aj0)j-;if(ij)temp=Ai; Ai=Aj; Aj=temp; printf(拆分后:n);printf(B:);for(t=0;ti-1;t+)printf(%4d,At);printf(n);printf(C:);for(t=i;tnext;pr=null;while(p)h-next=pr;pr=h; h=p; p=p-next; 4、删除顺序表中元素长度为n的线性表A采用顺序存储方式,写算法删除线性表中所有值为item的数据元素。要求:时间复杂度为O(n),空间复杂度为O(1)。5、将数组偶数移至奇数之前设计将数组An中所有的偶数移到奇数之前的算法。要求:不增

18、加存储空间,且时间复杂度为O(n)。代码:#include#includeint main()int A20=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;inti,j,x; /x=A0; i=0; j=19;while(ij) x=Ai;while(Aj%2=1)j-;if(ij) Ai=Aj;i+; if(ij)while(Ai%2=0)i+;if(ij) Aj=Ai; j-; Ai=x; for(i=0;i20;i+)printf(%d ,Ai);printf(n);system(pause);数据测试:6、逆序输出单链表各元素代码

19、:#include#includetypedefstruct nodechar data;struct node *next; list;typedef list *link;link Create()/创建链表。charch;list *p;link head;head=NULL;ch=getchar();while(ch!=n) p=(list *)malloc(sizeof(list); p-data=ch;p-next=head;head=p;ch=getchar(); return head;void Display(link head)list *p; p=head;printf(

20、头插法建立的链表的输出结果:n);while(p)printf(%c,p-data); p=p-next; printf(n);int main()link head;printf(请输入链表的内容:n);head=Create();Display(head);system(pause);数据测试:7、合并两个单链表()A为递增有序的单链表,长度为n。B为递减有序的单链表,长度为m。编写程序,利用原表的存储空间,将A、B合并成为一个递增有序的单链表。要求:时间复杂度为O(m+n)。算法:/先将单链表B逆转:void Reverse(Node *r) Node *q=r,*p=null,*tem

21、p;while(q)temp=q; q=q-next;temp-next=p; p=temp; r=p;/再合并两个非递减的单链表:Node *Merge(Node *a,Node *b) Node *s,*r; Node *p=a,*q=b;while(p!=NULL&q!=NULL)if(p-datadata)if(p=a) s=a; r=a; else r-next=p; p=p-next; elseif(q=b) s=b; r=b; else r-next=q; q=q-next; r=r-next; if(p=NULL&q!=NULL)r-next=q;if(q=NULL&p!=NU

22、LL)r-next=p;return s;/主方法。合并题目所给的两个单链表。Node *MergeFunc(Node *a,Node *b) Reverse(b); Node *result=Merge(a,b); resultresult;8、合并两个单链表()单链表A、B,数据都为整型有序,编写程序,利用原节点,将A和B中具有相同数据的节点删除,并将B中与原A表不同数据的节点插入A中,保持A的递增有序。算法:void Merge(Node *a,Node *b) Node *p,*q,*previous; Node *temp1,*temp2; /假设a、b带头节点。 p=a-next;

23、 q=b-next; previous=a; while(p!=NULL&q!=NULL) if(p-datadata) previous=p;/previous指示p的前驱。 p=p-next; else if(p-data=q-data) temp1=p; p=p-next; previous-next=p-next; delete temp; else temp2=q; q=q-next; previous-next=temp; temp-next=p; previous=previous-next; if(p=NULL&q!=NULL)previous-next=q;9、两个单链表求和已知2个按元素非递减的单链表A和B,设计一算法利用原表节点空间形成连续的新链表A和B,使得A=AB,B=AB。算法:void Adjust(LinkList&A,LinkList&B) /假设A、B带头结点。 pa=A; pb=B; while(pa-next!=NULL&pb-next!=NULL) if(pa-next-datanext-data) pa=pa-next; else if(pa-next-data=pb-next-data)pa=pa-next;pb=pb-next; elsetemp=pb-next;pb-ne

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

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