文档详情

北邮数据结构实验一题目一..doc

发布:2017-01-27约字共8页下载文档
文本预览下载声明
数据结构实验报告 实验名称: 实验一——题目一 学生姓名: 班 级: 班内序号: 学 号: 日 期: 20年X月X日 实验要求 1.1、试验目的: 通过选择下面四个题目之一进行实现,掌握如下内容: ◎熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 ◎学习指针、模板类、异常处理的使用 ◎掌握线性表的操作的实现方法 ◎学习使用线性表解决实际问题的能力 1.2、实验内容 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。 线性表存储结构(五选一): 带头结点的单链表 不带头结点的单链表 循环链表 双链表 静态链表 线性表的基本功能: 构造:使用头插法、尾插法两种方法 插入:要求建立的链表按照关键字从小到大有序 删除 查找 获取链表长度 销毁 其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 2.2 关键算法分析 1、头插法 自然语言描述: a:在堆中建立新结点 b:将 a[i]写入到新结点的数据域 c:修改新结点的指针域 d:修改头结点的指针域。将新结点加入链表中 伪代码描述 a:Node T * s=new Node T b:s-data=a[i] c:s-next=front-next; d:front-next=s 2:尾插法 自然语言描述: a:在堆中建立新结点。 b:将 a[i]写入到新结点的数据域。 c:将新结点加入到链表中。 d:修改修改尾指针。 伪代码描述 a:Node T * s=new Node T b:s-data=a[i] c:r-next=s; d:r=s 3:析构/删除函数 自然语言描述: a:新建立一个指针,指向头结点 b:判断要释放的结点是否存在, c:暂时保存要释放的结点 d:移动 a 中建立的指针 e:释放要释放的指针 伪代码描述 a:Node T * p=front b:while(p) c: front=p d:p=p-next e:delete front 4:按位查找函数 自然语言描述: a:初始化工作指针 p 和计数器 j,p 指向第一个结点,j=1 b:循环以下操作,直到 p 为空或者 j 等于 1 b1:p 指向下一个结点 b2:j 加 1 c:若 p 为空,说明第 i 个元素不存在,抛出异常 d:否则,说明 p 指向的元素就是所查找的元素,返回元素地址 伪代码描述 a:Node T * p=front-next;j=1; b:while(pj!=1) b1:p=p-next b2:j++ c:if(!p) throw ”error” d:return p 5:按值查找函数 自然语言描述: a:初始化工作指针 p 和计数器 j,p 指向第一个结点,j=1 b:循环以下操作,找到这个元素或者 p 指向最后一个结点 b1:判断 p 指向的结点是不是要查找的值,如果是,返回 j,否则 p 指向下一个结点,并且 j 的值加一 c:如果找到最后一个结点还没有找到要查找的元素,返回查找失败信息 伪代码描述 a:Node T * p=front-next;j=1; b:while(p) b1: if(p-next==x) return j p=p-next j++ c:return “error” 6:插入函数 自然语言描述: a:在堆中建立新结点 b:将要插入的结点的数据写入到新结点的数据域 c:修改新结点的指针域 d:修改前一个指针的指针域,使其指向新插入的结点的位置 伪代码描述 a:Node T * s=new Node T; b:s-data=p-data c:s-next=p-next d:p-next=s e:p-data=x 7:删除函数 自然语言描述: a:从第一个结点开始,查找要删除的位数 i 前一个位置 i-1 的结点 b:设 q 指向第 i 个元素 c:将 q 元素从链表中删除 d:保存 q 元素的数据 e:释放 q 元素 伪代码描述 a:q=p-next b:p-next=q-next c:x=q-data d:delete q 8:遍历打印函数 自然语言描述: a:判断该链表是否为空链表,如果是,报错 b:如果不是空链表,新建立一个 temp 指针
显示全部
相似文档