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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构第二章.docx

1、数据结构第二章第二章一、求AUB(即A与B的并集)。Void union (Linear_list LA,linear _list LB) /假定linear_List是线型表类型 N=ListLength(LA); /求表的表长 For (i=1;i=ListLength(LB);i+)( X=GetNode(LB,i); /取LB中第i个元素赋给x If(LocateNode(LA,x)=0) /若没有找到 InsertList(LA,+n,x); 二、删除线性表L中重复的元素。 Void purge (Linear_List L) i=1; While(i=Listlength(L) X

2、=GetNode(L,i);j=i+1; While(j=ListLength(l) Y=GetNode(L,j); If(x=y) /表示x与y内容相同 DeleteList(L,j); Else J+; i+; 三、定义顺序表 #define ListSize 100 /定义表空间为100 Typedef int DataType; /datatype类型为int Typedef struct Datatype data(listSize); /数组data用来存放表结点 Int length; /线性表的表长 seqlist;四、顺序表插入算法 Void Insertlist(SeqLi

3、st *L,int I,DataType x) /在顺序表L中第i个位置之前插入一个新元素a Int j; If(ii-length+1)( Printf(“position error”); Return; If(L-length=ListSize)( Printf(“overfloew”); Return; For(j=L-length-1;j=i-1;j-) L-data(j+1)=l-dataj /从最后一个元系开始后移 L-datai-1=x; /插入新元素x,i-1个元素实际为第i个元素 L-Length+; /表长度加1五、顺序表L中删除第i个元素 DataType Delete

4、list(Seqlist *L,int i) /顺序表L中删除第i个元素,并返回被删除元素 Int j; DataType x; /DataType是一个通用标识符,在使用时再定义实际类型 If(iL-length) Printf(“position error”); Exit(0); X=L-datai; /保存被删除元素 For(j=1;jLength-1;j+) L-dataj-1=L-dataj; /元素前移 L-length-; /实际表长减1 Return x; /返回被删除的元素六、将顺序线性表,将该线性表逆置SeqList ConvertsSeqList L DataType

5、x; K=l.length/2; For(i=0;ik;i+) X=L.datai; L.datai=L.dataL.length-i-1; L.dataL.length-i-1=x; Return L;七、找到最大值及最小值及位置Void MaxMin(SeqList L,DataType *max,DataType *min,int *k,int *j) int i; *max=L.data0; *min=L.data0;*k=*j=1; /先假设第一个元素就是最大值,也是最小值 For (i=1;i*.max) *max=L.datai; *k=i; While if (L.dataid

6、ata=ch; /数据域赋值 p-next=head; /指针域赋值 head=p; /头指针指向新节点 ch=getchar(); /读入下一个字符 Return head; /返回链表头指针八、尾插法 LinkList CreatelistR() LinkList head,rear; ListNode *p;Char ch;Head=NULL; rear=NULL; /置空单链表Ch=getchar(); /读入第一个字符While(ch!=n) P=(ListNode *)malloc(sizeof(ListNode); /申请新结点 p-data=ch; /读入数据赋值 if(hea

7、d=NULL)head=p; /新结点*P插入空表 else rear-next=p; /新结点*p插入到非空结点 rear=p; /尾指针指向新表尾 ch=getchar(); if(rear!=NULL)rear-next=NULL; /终端结点域置空return head;另引入头结点后,尾插法可简化为:p-data=ch;r=next=p; /新结点连接到尾结点之后r=p; /尾指针指向新结点九、带头结点单链表的查找算法 ListNode * GetNode(LinkList head,int i)/head为带头结点的单链表头指针,i为要查找的序号 /若查找成功,则返回查找结点存储地

8、址,否则返回NULLListNode *p; int j;p-head-next;j=1; /使p指向第一个结点,j置1while(p!=NULL &jnext;+j; If(j=i) Return P;Else Return NULL;按值查找:ListNode *locatenodek(Linklist head,DataType k)/head为带头结点单链表的头指针,k要查找的结点的值ListNode *p=head-next; While(p&p-data!=k) P=p-next;Return p;在P结点之后插入新结点*SVoid insertList(LinkList head

9、,int I,DataType x) /在以head为头指针的带头结点的单链表中第i个结点位置插入一个x新结点ListNode *p,*s; int j;P=head;j=0;While(p!=NULL&jnext;+j; If(p=NULL) Printf”(errorn”);return;Else S=(ListNode *)malloc(sizef(ListNode); S-data=x;s-next=p-next; P-next=s;删除操作: s=p-next; p-next=s-next; x=s-data; free(s); return x; 十、单链表A分解马A和B,其中头结

10、点分别为a和b,使得A中为奇数元素,B中为偶数元素。Void sPlit(LinkList a,linkList b)/按序号奇偶分解单链表,注意b在调用前是一个带头结点的空链表ListNode *p,*r,*r; P=a-next; /p指向表头结点 R=a; /r指向表A的当前结点 S=b; /s指向表B的当前结点 While (p!=NULL) r-next=p; /把序号为奇数的结点链接到A表上 r=p; /r总是指向A表的最后一个结点 p=next; if(p) s-next=p; /序号为偶数的结点链接到B表上 s=p; / s总是指向B表的最后一个结点 p=next; /P指向原

11、链表A中的偶数序号的结点 r-next=s-next=NULL;十二、将La和Lb单链表(带头结点),两个单链表都是按数值递增有序的,将这两个表合并成为一个有序表 Lc。LinkList MergeList(LinkList la,Linklist Lb) /归并两个有序表la和lb为有序表lc ListNode *pa,*pb,*pc; LinkList Lc;Pa=La-next; pb=Lb-next; /pa,pb分别指向两个链表开始结点Lc=pc=La; /用La的头结点做为Lc的头结点While(pa!=NULL&pb!=NULL) If(pa-datadata) Pc-next=

12、pa;pc=pa;pa=pa-next; /将pa指向结点指向pc Else Pc-next=pb;pc=pb; pb=pb-next; /将pb指向结点指向pc Pc-next=pa!=NULL?pa:pb; /插入剩余部分,哪个不空,就插哪个Free(Lb); /释放lb头结点Return Lc; /返回合并后的表十三、从大到小顺序排列的头结点指针为L的非空单循环链表,插入一个结点并保持有序。Void insertlist (LinkList L,int x) /将值为x的新结点插入到有序循环表中适当位置 listNode *s,*p,*q; s=(ListNOde*)malloc(siz

13、eof(ListNode); /申请结点存储空间 s-data=x; p=L; q=p-next; /q指向开始结点 while(q-datax&q!=L) p=-next; /p指向q的前趋 q=p-next; /q指向当前节点 p-next=s; /插入*s结点 s-next=q;十四、在双负链表*P之前插入一结点 Void DLInsert(Dlnode *p,DataType x) /将值为x的新结噗插入到带头结点的双向链表的*P之前 DLNode *s=(DLNOde *)malloc(sizeof(DLNode); s-data=x;s-prior=prior;s-next=p;p

14、-prior-next=s; p-prior=s;双向链表删除结点: DataType DLDelete (DlNode *P) p-prior-next=p-next; p-next-prior=p-prior; x=p-data; free(p);return x;十五、将一个头结点指针为head的循环链表,写一算法,将其修改为真正的双向循环链表Void trans(Dlinklist head) Dlnode *p ; P=head; /使p指向头结点 While(p-next!=head) p-next-prior=p; /p指结点的直接后继的前趋就是p p=p-next; /p指向下一个结点 Head-prior=p; /head的前趋指向表的终端结点两个顺序表A和B,都递增有序,从A中删除与B相同的元素。带头结点的单链表,将P指向结点与后继结点位置交换。已知两个集合A,B,递增有序,设计A与B的交集。设带头结点的双向循环链表,head为头指针,在x之 前插入一个值为y的结点

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

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