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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

逗比丢数据结构.docx

1、逗比丢数据结构数据结构与测绘软件开发实验报告 姓 名:豆京京 班 级:测绘工程13-03班 学 号:07132860 指导教师: 王永波 中国矿业大学环境与测绘学院 2015-5-20 实验一:线性表类的设计与实现一、实验目的通过上机实践,强化课堂有关线性表的教学内容,通过动手编程实现线性表类的设计,并通过实例验证类的实例化效果及其相关应用,达到对课堂所学内容的深刻掌握。二、实验内容: 线性表类的设计与实现,包括线性表的实际应用。(1)顺序存储的删除 (2)顺序存储的插入 (3)顺序存储的查找(4)链式存储的删除 (5)链式存储的插入 (6)链式存储的查找三、实现代码实现代码:#include

2、 stdafx.h#include using namespace std;/ 类声明/ 顺序存储线性表class CSeqListpublic: / 构造、析构函数 CSeqList(); CSeqList(int size); CSeqList();public: / 复制构造函数、赋值运算 CSeqList(const CSeqList& sl); CSeqList& operator=(const CSeqList& sl);public: / 友元函数 friend ostream& operator 0) delete _data;void CSeqList:innt(int cu

3、rsize)for (int i = 0; i cursize; i+) _datai = i * 100;_curSize = cursize;int CSeqList:Length() constfor (int i = 0; i _curSize; i+) cout _datai ; cout = i; j-) _dataj + 1 = _dataj; _datai = x;_curSize+;for (int k = 0; k _curSize; k+)cout _datak ; cout endl;return 0;int CSeqList:Remove(int z) /删除for

4、(int j = z; j = _curSize; j+) _dataj = _dataj + 1; _curSize-; for (int g = 0; g_curSize; g+) cout _datag ; cout endl; return 0;int CSeqList:Find(int x) /查找for (int j = 0; j _maxSize; j+) if (_dataj = x) coutj+1; return 0; cout; return -1;ostream& operator(ostream& os, CSeqList& sl) for (int i = 0; i

5、 sl._curSize; i+) cout sl._datai ; cout endl; return os;/ 类声明template class SeqList /顺序表存储数组 Type *data; /最大允许长度 int MaxSize; /当前最后元素下标 int last;public: SeqList(int MaxSize = defaultSize); SeqList() delete data; public: / 友元函数int friend operator(ostream& os, SeqList& sl); public: int Length() const

6、return last + 1; / 查找 int Find(Type& x) const; int Locate(int i) const; / 定位 int Insert(int i, Type &x); / 插入 int Remove(int i); / 删除 int Next(Type & x); / 后继 int Prior(Type & x); / 前驱 int IsEmpty() return last = -1; int IsFull() return last = MaxSize - 1; Type Get(int i) / 提取 return i last ? NULL :

7、 datai; ;/ 类实现/ 类声明/ 链式存储线性表struct SLNode int data; / 数据域 struct SLNode *prior; / 指针域 struct SLNode *next; / 指针域;class CLinkedList public: / 构造、析构函数 CLinkedList(void); CLinkedList(void);public: / 复制构造函数、赋值运算 CLinkedList(const CLinkedList& sl); CLinkedList& operator=(const CLinkedList& sl);public: /

8、友元函数int friend operatordata = x) return result; else cur = cur-next; result+; return -1; int CLinkedList:insert(int& x, int i)if (i data = x; temLN-next = NULL; head = temLN; _size+;return 1; else if (i _size) / 在链表尾部插入 SLNode *cur = head; while (cur-next != NULL) cur = cur-next;/ 插入结点操作 SLNode *tem

9、LN = new SLNode (); temLN-data = x; temLN-next = NULL; cur-next = temLN; _size+;return 1; SLNode *cur = head; for (int k = 1; k next; / 插入结点操作 SLNode *temLN = new SLNode (); temLN-data = x; temLN-next = cur-next; cur-next = temLN;_size+;return 1; int CLinkedList :remove(int& x)SLNode * cur = head; i

10、f (cur-data = x) / 删除表头第一个元素 head = cur-next; return 1; / 删除除表头之外的其他位置元素 while (cur-next != NULL) if (cur-next-data = x) / 执行删除操作 cur-next = cur-next-next; return 1; cur = cur-next; return 1;int CLinkedList :isEmpty()if (_size = 0 | head = NULL) return 1; return 0;void CLinkedList :setNull()_size =

11、0; head = NULL;int CLinkedList :get(int i)if (i _size) cout 下表越界! endl; return 0; SLNode* cur = head; for (int k = 1; k next; return cur-data;void CLinkedList :output()SLNode * cur; cur = head; while (cur != NULL) cout data next; cout endl;int main(int argc, char* argv)/* CSeqList sl(100);int len =

12、sl.Length();cout len endl;cout endl;int y = 1000; int p = 2330; sl.Insert(y, 5); sl.Remove(6); sl.Find(p); */ CLinkedList myList; for (int i = 1; i = 12; +i) myList.insert(i, i); cout 输出遍历结果: endl; myList.output();cout 删除第个元素: endl; int x = 9; myList.remove(x);/ 遍历 myList.output();cout 在第个元素位置处插入一个:

13、 endl; x = 20; myList.insert(x, 5);/ 遍历 myList.output(); return 0;四、算法测试数据及其运行结果五、实验小结(问题及心得)(1)学会了线性表的基本应用,掌握了线性表的基本概念;(2)掌握了VC+软件的应用,初步掌握了编写程序的基本步骤;(3)掌握了线性表的实际用途。实验二:线性表类的设计与实现一、实验目的通过上机实践,强化课堂有关线性表的教学内容,通过动手编程实现线性表类的设计,并通过实例验证类的实例化效果及其相关应用,达到对课堂所学内容的深刻掌握。二、实验内容利用C+语言编程实现二叉树的构建及其先序、中序、后序遍历算法.(1)二

14、叉树的构建(2)二叉树的先序遍历算法及其实现(3)二叉树的中序遍历算法及其实现(3)二叉树的后续遍历算法及其实现三、实现代码实现代码:#include #include using namespace std;typedef struct BTNodeint data; BTNode *lChild; BTNode *rChild; SBTNode;class CBinTreepublic: CBinTree(); CBinTree(); void createBSTree(vector& xArray); void insertNode(SBTNode*& temNode, BTNode*&

15、 root); void InOrder(BTNode*& root); / 中序遍历 void PreOrder(BTNode*& root); / 先序遍历 void PostOrder(BTNode*& root); / 后序遍历 public: BTNode* root; vector xArray;CBinTree:CBinTree(): root(NULL)CBinTree:CBinTree()xArray.clear(); void CBinTree:createBSTree(vector& xArray)for (vector:iterator iter = xArray.be

16、gin(); iter != xArray.end(); +iter) BTNode *temNode = new BTNode; temNode-data = *iter; temNode-lChild = NULL; temNode-rChild = NULL;insertNode(temNode, root); void CBinTree:insertNode(SBTNode*& temNode, BTNode*& root)if (root = NULL) root = temNode; else if (temNode-data root-data) insertNode(temNo

17、de, root-rChild); else insertNode(temNode, root-lChild); void CBinTree:InOrder(BTNode*& root)if (root = NULL) return;InOrder(root-lChild); cout data rChild);void CBinTree:PreOrder(BTNode*& root)if (root = NULL) return;cout data lChild); PreOrder(root-rChild);void CBinTree:PostOrder(BTNode*& root)if

18、(root = NULL) return;PostOrder(root-lChild); PostOrder(root-rChild); cout data ;int _tmain(int argc, _TCHAR* argv)vector xArray; xArray.push_back(11); xArray.push_back(19); xArray.push_back(3); xArray.push_back(8); xArray.push_back(13); xArray.push_back(2); xArray.push_back(7); CBinTree BT; BT.creat

19、eBSTree(xArray); BT.InOrder(BT.root); cout endl; BT.PreOrder(BT.root); cout endl; BT.PostOrder(BT.root); cout endl; return 0;四、算法测试数据及其运行结果五、实验小结(问题及心得) (1)学会了二叉树的基本应用,掌握了二叉树的基本概念; (2)掌握了二叉树的实际用途。实验三:线性表类的设计与实现一、实验目的通过上机实践,强化课堂有关线性表的教学内容,通过动手编程实现线性表类的设计,并通过实例验证类的实例化效果及其相关应用,达到对课堂所学内容的深刻掌握。二、实验内容1)图的

20、创建2)基于深度优先的图的遍历算法的设计与实现3)基于广度优先的图的遍历算法的设计与实现4)基于Prim算法的最小生成树的构建5)基于Kruskal算法的最小生成树的构建三、实现代码实现代码:#include stdafx.h#include #include #include #include #include using namespace std;/ 用于存储图的节点及其相邻节点的结构体变量类型struct SGNode int key; / 结点自身标识 map neighNodes; / 与当前结点相邻的结点集合,及其与相邻结点之间路径的权值 ;/ 用于存储边的结构体变量类型stru

21、ct SGEdge int start; int end;/ 用于存储边及其权重的map容器(注意:会按照权重自小而大自动排序)typedef map EdgeSet;class CMyGraphpublic: CMyGraph(void); CMyGraph(void);public: / 其他函数,供实例调用 void DFS(); void DFS(int i, vector& mystack, bool* visited); void BFS(); void BFS(int i, deque& mydeque, bool* visited); void Prim(); void Kru

22、skal(); protected: / 属性变量 private: / 成员变量 vector NodeSet;CMyGraph:CMyGraph(void)float g77 = 0, 12, 1, 0, 0, 0, 4, 12, 0, 0, 11, 0, 10, 0, 1, 0, 0, 9, 2, 0, 0, 0, 11, 9, 0, 0, 8, 0, 0, 0, 2, 0, 0, 5, 3, 0, 10, 0, 0, 0, 7, 6, 0, 0, 0, 8, 5, 7, 0, ;for ( int i = 0; i 8; i+) SGNode sg; sg.key = i;NodeSet.push_back(sg); for (int m = 0; m 8; m+) for (int n = 0; n 8; n+) if (gmn != 0) NodeSetm.neighNodes.insert(map:value_type(n, gmn); vector:iterator iter; for (iter = NodeSe

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

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