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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验09 群体类与群体数据的组织资料.docx

1、实验09 群体类与群体数据的组织资料 谭毓银 程序设计课内实验C+2014 数学与应用数学曾悦 03 4 16 6 学时)09 群体类与群体数据的组织(4实验 群体类与群体数据的组织)9章 (第 一、实验目的 掌握函数模板与类模板。(1) (2) 了解线性群体与群体数据的组织。 二、实验任务 9_1求绝对值的函数模板及其应用#include using namespace std; template T fun(T x) return x 0? -x : x; int main() int n = -5; double d = -5.5;cout fun(n) endl;cout fun(d)

2、 endl;return 0; 1 9_2函数模板的示例。#include using namespace std; /定义函数模板template void outputArray(const T *array, int count) for (int i = 0; i count; i+) cout arrayi ; cout endl; int main() /主函数const int A_COUNT = 8, B_COUNT = 8, C_COUNT = 20; int数组 int a A_COUNT = 1, 2, 3, 4, 5, 6, 7, 8 ; /定义 数组 double b

3、B_COUNT = 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 ; /定义double char /定义数组char cC_COUNT = Welcome to see you!; cout a array contains: endl; 调用函数模板/outputArray(a, A_COUNT); cout b array contains: endl; outputArray(b, B_COUNT); /调用函数模板cout c array contains: endl; /调用函数模板 outputArray(c, C_COUNT); return 0

4、; 2 9_3 类模板应用举例。#include #include using namespace std; / 结构体Student struct Student int id; /学号 float gpa; /平均分 ; template class Store /类模板:实现对任意类型数据进行存取 private: T item; / item用于存放任意类型的数据 bool haveValue; / haveValue标记 item是否已被存入内容 public: Store(); / 缺省形式(无形参)的构造函数 T &getElem(); /提取数据函数 void putElem(

5、const T &x); / 存入数据函数 ; /以下实现各成员函数。 template /缺省构造函数的实现 Store:Store(): haveValue(false) template /提取数据函数的实现 T &Store:getElem() /如试图提取未初始化的数据,则终止程序 if (!haveValue) cout No item present! endl; exit(1); /使程序完全退出,返回到操作系统。 item return item; / 返回中存放的数据 template /存入数据函数的实现void Store:putElem(const T &x) 中已存

6、入数值,表示置为 将haveValue = true; / haveValue trueitemitem 将x值存入 / item = x; int main() Store s1, s2; s1.putElem(3); s2.putElem(-7); cout s1.getElem() s2.getElem() endl; 3 Student g = 1000, 23 ; Store s3; s3.putElem(g);cout The student id is s3.getElem().id endl;Store d;cout Retrieving object D. ;cout d.g

7、etElem() endl;过程中导致程序终在执行函D.getElement(未经初始/由return 0; 9_4动态数据类模板示/Array.h#ifndef ARRAY_H#define ARRAY_H #include /数组类模板定义 template class Array private: 类型指针,用于存放动态分配的数组内存首地址T* list; /T 数组大小(元素个数)int size; /public: 构造函数 Array(int sz = 50); / Array(const Array &a); /拷贝构造函数 Array(); / 析构函数使数组对象可以整体赋重载

8、Array & operator = (const Array &rhs); / ? 值 C+Array孜屝/T & operator (int i); 重载,使对象可以起到普通数组的作用 版本运算符的?孜屝const const T & operator (int i) const; 普通数组类型的转换,使T*重载到operator T * (); /C+Array对象可以起到 的作用 4 版本类型转换操作符的const operator const T * () const; /到T* 取数组的大小int getSize() const; / 修改数组的大小 void resize(int

9、 sz); /; 构造函数/template Array:Array(int sz) ,应当非负/sz为数组大小(元素个数) assert(sz = 0); size 将元素个数赋值给变量size = sz; / 类型的元素空间个T list = new T size; /动态分配size 析构函数/template Array:Array() delete list; 拷贝构造函数/template Array:Array(const Array &a) x 取得数组大小,并赋值给当前对象的成员/从对象size = a.size; / 为对象申请内存并进行出错检查 nlist = new T

10、size; / 动态分配个T类型的元素空间 复制数组元素到本对象从对象X /for (int i = 0; i size; i+) listi = a.listi; rhs赋值给本对象。实现对象之间的整体赋值/重载?运算符,将对象template Array &Array:operator = (const Array& rhs) if (&rhs != this) 不同,则删除数组原有内存,然后重新分配如果本对象中数组大小与rhs/ if (size != rhs.size) /删除数组原有内存 delete list; 设置本对象的数组大小size = rhs.size; / 个元素的内存

11、 重新分配list = new Tsize; /n X 从对象/ 复制数组元素到本对象for (int i = 0; i size; i+) 5 listi = rhs.listi; /返回当前对象的引用 return *this; /重载下标运算符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能template T &Array:operator (int n) /检查下标是否越界 assert(n = 0 & n size); 的数组元素 /返回下标为nreturn listn; template const T &Array:operator (int n) const 检查下

12、标是否越界 assert(n = 0 & n size); / 的数组元素返回下标为nreturn listn; / 类型的指针,类的对象名转换为T/重载指针转换运算符,将Array /指向当前对象中的私有数组。 Array类的对象名/因而可以象使用普通数组首地址一样使用template Array:operator T * () /返回当前对象中私有数组的首地址 return list; template Array:operator const T * () const 返回当前对象中私有数组的首地址 return list; / 取当前数组的大小/template int Array:g

13、etSize() const return size; sz / 将数组大小修改为template void Array:resize(int sz) assert(sz = 0); /是否非负检查sz / 如果指定的大小与原有大小一样,什么也不做if (sz = size) return; 申请新的数组内存T* newList = new T sz; / 6 n 中较小的一个赋值给与size int n = (sz size) ? sz : size; /将sz 个元素复制到新数组中 将原有数组中前n/for (int i = 0; i n; i+) newListi = listi; /

14、删除原数组delete list; list 指向新数组list = newList; / 使size size = sz; /更新 /ARRAY_H #endif /9_4.cpp #include #include #include Array.h using namespace std; int main() 个元素。用来存放质数的数组,初始状态有 10Array a(10); / int count = 0; int n; cout = 2 as upper limit for prime numbers: ; cin n; for (int i = 2; i = n; i+) i 是

15、否能被比它小的质数整除/ 检查bool isPrime = true; for (int j = 0; j count; j+) 不是质数整除,说明 i/ if (i % aj = 0) 若 i被ajisPrime = false; break; 写入质数表中i /把if (isPrime) / 如果质数表满了,将其空间加倍if (count = a.getSize() a.resize(count * 2); acount+ = i; for (int i = 0; i count; i+) / 输出质数cout setw(8) ai; cout endl; 7return 0; 9_5链表

16、类应用案/Node.h#ifndef NODE_H#define NODE_H/类模板的定template class Node private:/指向后继结点的指Node *next;public:/数据T data;/Node (const T &data, Node *next = 0);构造函void insertAfter(Node *p);/在本结点之后插入一个同类结p/删除本结点的后继结点,并返回其地Node *deleteAfter();/Node *nextNode(); 获取后继结点的地获取后继结点的地const Node *nextNode() const;/; 类的实现

17、部分/ /构造函数,初始化数据和指针成员template Node:Node(const T& data, Node *next/* = 0 */) : data(data), next(next) 返回后继结点的指针/template Node *Node:nextNode() return next; /返回后继结点的指针 8 template const Node *Node:nextNode() const return next; 在当前结点之后插入一个结点p /template void Node:insertAfter(Node *p) /p结点指针域指向当前结点的后继结点 p-

18、next = next; 当前结点的指针域指向/ next = p; p 删除当前结点的后继结点,并返回其地址/template Node *Node:deleteAfter() Node *tempPtr = next; /将欲删除的结点地址存储到tempPtr中 if (next = 0) /如果当前结点没有后继结点,则返回空指针return 0; 的后继结点/使当前结点的指针域指向tempPtrnext = tempPtr-next; 返回被删除的结点的地址 /return tempPtr; #endif /NODE_H / LinkedList.h #ifndef LINKEDLIST

19、_H #define LINKEDLIST_H #include Node.h template class LinkedList private: /数据成员: 表头和表尾指针Node *front, *rear; /由插入和删除操作记录表当前遍历位置的指针, Node *prevPtr, *currPtr; / 更新 /int size; 表中的元素个数 /int position; reset 当前元素在表中的位置序号。由函数使用 / 函数成员:ptrNext /生成新结点,数据域为,指针域为 itemNode *newNode(const T &item,Node *ptrNext=N

20、ULL); 释放结点 / 9 void freeNode(Node *p); 。L 拷贝到当前表(假设当前表为空)/将链表 调用被拷贝构造函数、operator = /void copy(const LinkedList& L); public: 构造函数LinkedList(); / / 拷贝构造函数 LinkedList(const LinkedList &L); 析构函数/ LinkedList(); 重载赋值运算符 LinkedList & operator = (const LinkedList &L); / / int getSize() const; 返回链表中元素个数 链表是否

21、为空 /bool isEmpty() const; void reset(int pos = 0);/初始化游标的位置 / 使游标移动到下一个结点void next(); bool endOfList() const; /游标是否到了链尾 int currentPosition(void) const; / 返回游标当前的位置 / void insertFront(const T &item); 在表头插入结点 void insertRear(const T &item); 在表尾添加结点/ void insertAt(const T &item); 在当前结点之前插入结点/ 在当前结点之后插

22、入结点 void insertAfter(const T &item); / T deleteFront(); 删除头结点 / void deleteCurrent(); 删除当前结点/ T& data(); 返回对当前结点成员数据的引用/ const T& data() const; / 返回对当前结点成员数据的常引用 operator= / 清空链表:释放所有结点的内存空间。被析构函数、调用void clear(); ; /LINKEDLIST_H #endif /9_7.cpp #include #include LinkedList.h using namespace std; int

23、 main() LinkedList list; 10 个整数依次向表头插入输入 10/for (int i = 0; i item; list.insertFront(item); /输出链表cout List: ; list.reset(); / 输出各结点数据,直到链表尾while (!list.endOfList() ; cout list.data() /使游标指向下一个结点 list.next(); cout endl; 输入需要删除的整数/int key; cout key; 查找并删除结点/ list.reset(); while (!list.endOfList() if (

24、list.data() = key) list.deleteCurrent(); list.next(); 输出链表 /cout List: ; list.reset(); 输出各结点数据,直到链表尾/ while (!list.endOfList() ; cout list.data() / 使游标指向下一个结点list.next(); cout endl; return 0; 11 9_6栈的应用(一个简单的整数计算器) /Stack.h #ifndef STACK_H #define STACK_H #include /模板的定义,SIZE为栈的大小 template class Sta

25、ck private: T listSIZE; /数组,用于存放栈的元素 int top; /栈顶位置(数组下标) public: 构造函数,初始化栈Stack(); / item压入栈void push(const T &item); /将元素 /将栈顶元素弹出栈T pop(); /将栈清空void clear(); 访问栈顶元素 const T &peek() const; / 测试是否栈满 bool isEmpty() const; / 测试是否栈空bool isFull() const; / /; /模板的实现template -1 构造函数,栈顶初始化为/Stack:Stack() : top(-1) template item/void Stack:push(const T &item) 将元素压入栈 /assert(!isFull(); 如果栈满了,则报错 将新元素压入栈顶list+top = item; / template T Stack:pop()

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

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