链表程序设计训练_实习报告_第1页
链表程序设计训练_实习报告_第2页
链表程序设计训练_实习报告_第3页
链表程序设计训练_实习报告_第4页
链表程序设计训练_实习报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、链表程序设计训练一 实验目的l 使学生掌握Visual C+ 6.0环境下C+语言程序调试与排错方法;l 使学生掌握单向链表结构并实现插入、删除、建表等基本功能操作;l 使学生掌握应单向循环链表结构并实现插入、删除、建表等基本功能操作;l 使学生掌握双向链表结构并实现插入、删除、建表等基本功能操作;l 使学生熟悉应用链表解决实际问题;二 实验环境l 所需硬件环境为微机;l 所需软件环境为Microsoft Visual C+ 6.0或Code:Blocks ;三 实验内容(二)、设计单向循环链表并实现其构建(包括正序及逆序建表)、插入、删除、销毁等基本操作算法#include<iostr

2、eam.h>#include<stdlib.h>#define OVERFLOW -2#define OK 1#define FAILURE 0#define TRUE 1#define FALSE 0#define ERROR -1typedef int ElemType;typedef int Status;typedef struct Node ElemType e; struct Node *next;ListNode,*list;Status DestroyList_Sl(list L)/销毁 list p; if(!L) return ERROR;/*单向线性链表

3、不存在*/ do/*释放单向线性链表空间*/ p=L->next; L->next=p->next; delete p; while(L); return OK;Status ListDelete_Sl(list L) list p; if(!L)return ERROR;/*单向线性链表结点L不存在*/ p=L->next; L->next=p->next; delete p; return OK;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL;

4、p=L; cout<<"正序的数字:" for(int i=0;i<n;i+) if(q=new ListNode) ElemType t; cin>>t; q->e=t; q->next=NULL; p->next=q; p=p->next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) p->next=L->next; return L;list set2(int n) list L2,p,q; if(L2=new ListNod

5、e) L2->next=NULL; L2->e=0; cout<<"逆序数字:" for(int i=0;i<n;i+) int t; cin>>t; if(q=new ListNode) q->e=t;q->next=NULL;q->next=L2->next;L2->next=q; else p=L2; while(p) L2=p;delete L2; p=p->next; p=L2->next; while(p->next) p=p->next; p->next=L2

6、; return L2;int main() list L,p,q,L2; int n,ListDelete_number; cout<<"个数:"<<endl; cin>>n; L=set(n); p=L->next; int i=0; while(p) cout<<p->e<<'t' p=p->next; i+; if(i=n) break; /单链正序测试 cout<<endl; L2=set2(n); p=L2->next; while(p!=L2) co

7、ut<<p->e<<'t' p=p->next; cout<<endl; ListDelete_number=ListDelete_Sl(L); cout<<"ListDelete_number="<<ListDelete_number<<endl; p=L->next; i=0; cout<<"剩下的:" while(p) cout<<p->e<<'t' p=p->next; i+;

8、if(i=n-1) break; /删除结点及测试 DestroyList_Sl(L);return 0;(三)、设计双向链表并实现其构建(包括正序及逆序建表)、插入、删除、销毁等基本操作算法#include<iostream.h>#include<stdlib.h>#define OVERFLOW -2#define OK 1#define FAILURE 0#define TRUE 1#define FALSE 0#define ERROR -1typedef int ElemType;typedef int Status;typedef struct Node E

9、lemType e; struct Node *next; struct Node *last;ListNode,*list;Status DestroyList_Sl(list L)/销毁 list p; if(!L) return ERROR;/*单向线性链表不存在*/ do/*释放单向线性链表空间*/ p=L->next; L->next=p->next; delete p; while(L); return OK;Status ListDelete_Sl(list L) list p; if(!L)return ERROR;/*单向线性链表结点L不存在*/ p=L-&

10、gt;next; L->next=p->next; delete p; return OK;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL; p=L; cout<<"正序的数字:" for(int i=0;i<n;i+) if(q=new ListNode) ElemType t; cin>>t; q->e=t; q->next=NULL; p->next=q; q->last=p; p=p->

11、next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) q=L->next; p->next=q; q->last=p; return L;list set2(int n) list L2,p,q; if(L2=new ListNode) L2->next=NULL; L2->e=0; cout<<"逆序数字:" for(int i=0;i<n;i+) int t; cin>>t; if(q=new ListNode) q->e=t

12、;q->next=NULL;q->next=L2->next;L2->next=q; else p=L2; while(p) L2=p;delete L2; p=p->next; p=L2->next; while(p->next) p=p->next; p->next=L2; return L2;int main() list L,p,q,L2; int n,ListDelete_number; cout<<"个数:"<<endl; cin>>n; L=set(n); p=L->

13、;next; int i=0; while(p) cout<<p->e<<'t' p=p->next; i+; if(i=n) break; /单链正序测试 cout<<endl; cout<<"反向:" i=0; p=L->next; while(p) p=p->last; cout<<p->e<<'t' i+; if(i=n) break; cout<<endl; L2=set2(n); p=L2->next; whil

14、e(p!=L2) cout<<p->e<<'t' p=p->next; cout<<endl; ListDelete_number=ListDelete_Sl(L); cout<<"ListDelete_number="<<ListDelete_number<<endl; p=L->next; i=0; cout<<"剩下的:" while(p) cout<<p->e<<'t' p=p->

15、;next; i+; if(i=n-1) break; /删除结点及测试 DestroyList_Sl(L);return 0;(四)、分析并使用循环链表解决“猴子选大王”问题#include<iostream.h>typedef struct Node int e; struct Node *next; struct Node *last;ListNode,*list;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL; p=L; for(int i=0;i<n;i+)

16、 if(q=new ListNode) q->e=i+1; q->next=NULL; p->next=q; q->last=p; p=p->next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) q=L->next; p->next=q; p->next=L; L->last=p; return L;int main() list L,p,q,t; int n,m,i=0; cout<<"总个数:"<<endl; ci

17、n>>n; cout<<"跳下报的数字:"<<endl; cin>>m; L=set(n); p=L; /*while(p) p=p->next; cout<<p->e<<'t' i+; if(i=n+1) break; */ while(!(L=p->next)&&(p=L->next) p=p->next; if(p->e>0) i+; if(i%m=0) q=p->next; t=p->last; t->next=q; q->last=t; cout<<"delete "<<p->e<<endl; delete p; p=t; cout<<"猴王:"<<p->e;return 0;四 实验分析及问题思考1、分析双向循环链表与单向链表、循环链表、双向链表间的差异;循环链表是在单向链表的基础

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论