实验2 链表验证实验_第1页
实验2 链表验证实验_第2页
实验2 链表验证实验_第3页
实验2 链表验证实验_第4页
实验2 链表验证实验_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

班级:计算机13-2 学号:1 姓名: 成绩:_实验二 单链表操作验证一、 实验目的1) 掌握线性表的链接存储结构;2) 验证单链表及其基本操作的实现;3) 进一步掌握数据结构及算法的程序实现的基本方法。二、 实验内容1) 用头插法(或尾插法)建立带头结点的单链表;2) 对已建立的单链表实现插入、删除、查找等基本操作。三、 设计与编码a) 本实验用到的理论知识模板类、多文件系统,链表的操作b) 算法设计参见课本数据结构(C+版)c) 编码将算法转化为c+程序,设计主函数完成对各成员函数的调用。源代码:/LinkList.h#ifndef _LINKLIST_H#define _LINKLIST_H#include using namespace std;template struct Node T data;struct Node*next;template class LinkList Node*first; /单链表的头指针public:LinkList(T a,int n); /建立有n个元素的单链表LinkList(); /析构函数void CreateList(int n); void Insert(int i,T x); /在单链表中第i个位置插入值为x的节点T Delete(int i); /在单链表中删除第i个节点int Locate(T x); /求单链表中值为x的序号void PrintList(); /遍历单链表,按序号依次输出个元素;template LinkList:LinkList(T a,int n) first=new Node;first-next=NULL; /初始化一个空链表for ( int i=n; i=0; i-) Node *s;s=new Node;s-data=ai;s-next=first-next; /为每个数组元素建立一个结点first-next=s; /插入到头结点之后 /构造函数,创建一个新的链表template LinkList:LinkList() Node*p;p=new Node;p=first; /工作指针p初始化while (p) /释放单链表的每一个结点的存储空间Node*q;q=new Node;q=p; /暂存被释放结点p=p-next; /工作指针p指向被释放结点的下一个结点,使单链表不断开delete q; /析构函数,释放空间template void LinkList:Insert(int i,T x) Node*p;p=new Node;p=first; /工作指针p初始化int j=0;while (p&jnext; /工作指针p后移j+;if (!p) throw位置;else Node*s;s=new Node;s-data=x; /向内存申请一个结点s,其数据域为xs-next=p-next; /将结点s插入到结点p之前p-next=s; /插入元素到位置itemplate T LinkList:Delete(int i) Node*p,*q;T x;p=new Node;p=first;int j=0; /工作指针p初始化while (p&jnext;j+;if (!p | !p-next)throw位置; /结点p不存在或结点p的后继结点不存在else q=p-next;x=q-data; /暂存被删结点p-next=q-next; /摘链delete q;return x; /删除位置i的函数template int LinkList:Locate(T x) Node*p;p=new Node;p=first-next;int j=1;while (p&p-data!=x) p=p-next; /工作指针p后移j+;if (p)return j;elsereturn 0; /查找template void LinkList:PrintList() Node*p;/设置工作指针p=first-next;/从首元结点开始遍历int i=1;/元素位序while(p)coutdatanext;i+;coutendl; /遍历显示链表#endif/LinkList.cpp#include #include Windows.h#include LinkList.husing namespace std;char pause;/typedef int T;int main()int n;cout输入要创建的链表的元素个数(n;coutendl;int a100;cout请依次输入数组元素的值。endl;for( int i=0; in; i+) cout输入aiai;coutendl;LinkList L(a,n);/T num,prior_num;/int num,prior_num;int num;int choice;docout1-插入操作n;cout2-删除操作n;cout3-查找操作n;cout4-输出链表n;cout5-退出n;coutchoice;switch(choice)case 1:/在指定位置插入元素int i;couti;coutendl;coutnum;coutendl;tryL.Insert(i,num);catch(char *error) couterrorendl; break;case 2:/删除指定位置元素couti;coutendl;trynum=L.Delete(i);cout被删除元素为:numendl;catch(char *error) couterrorendl; break;case 3:/ 按值查找coutnum;/i=L.Locate(num);cout查询的元素num位于链表的位置为:iendl;break;case 4:/显示表L.PrintList();coutendl;break;case 5:/退出coutExitendl;break;default:cout无效的选项n;break;while(choice!=5);return 0;四、 运行与调试a) 在调试程序的过程中遇到什么问题,是如何解决的?进行运行时没有错误,但输出的数组是倒序的,将LinkList methon内的for循环的条件更改之后正常运行并达到预想效果。b) 设计了哪些设计数据?测试结果是什么

温馨提示

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

评论

0/150

提交评论