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