




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构算法实验内容与指导1、 实验目的:将书中常用算法编写成程序,上机调试,验证算法的正确性,同时理解数据结构对于软件开发的意义。同时又能复习C+语言的重点与难点,熟悉vc+6.0调试环境,掌握一个完整程序的构成,为今后软件设计打下基础。2、 实验要求:熟练掌握c+面象对象的编程思想及vc+6.0上机调试环境。3、 实验内容:(1)线性表顺序存储(顺序表类)的插入、删除等操作的实现(2)线性表链式存储(单链表类)的建立、插入、删除等操作的实现(3)特殊线性表进栈、退栈操作的实现(4)顺序查找及二分查找算法的实现(5)常用的几种排序算法的实现(6)二叉树的建立、遍历算法的实现(7)图的邻接矩阵的建立,及遍历算法实现实验一:线性表顺序存储(顺序表类)的插入、删除等操作的实现/SeqList.hclass SeqListprotected:DataType *list;/数组int maxSize;/最大元素个数int size;/当前元素个数public:SeqList(int max=0); /构造函数SeqList(void); /析构函数int Size(void) const;/取当前数据元素个数void Insert(const DataType& item, int i);/插入DataType Delete(const int i);/删除DataType GetData(int i) const;/取数据元素;SeqList:SeqList(int max)/构造函数maxSize = max;size = 0;list = new DataTypemaxSize;SeqList:SeqList(void)/析构函数delete list;int SeqList:Size(void) const/取当前数据元素个数return size;void SeqList:Insert(const DataType& item, int i)/插入/在指定位置i前插入一个数据元素itemif (size = maxSize) cout 顺序表已满无法插入! endl;exit(0);if(i size)/参数正确与否判断cout 参数i越界出错! i; j-) listj = listj-1; listi = item;/在i位置插入itemsize+;/当前元素个数加1DataType SeqList:Delete(const int i)/删除/删除指定位置i的数据元素,删除的元素由函数返回if (size = 0)cout 顺序表已空无元素可删! endl;exit(0);if(i size - 1)/参数正确与否判断cout参数i越界出错!endl;exit(0);DataType x = listi;/取到要删除的元素/从i+1至size-1逐个元素前移for(int j = i;j size-1; j+) listj = listj+1;size-;/当前元素个数减1return x;/返回删除的元素DataType SeqList:GetData(int i) const/取数据元素/取位置i的数据元素,取到的数据元素由函数返回if(i size - 1)/参数正确与否判断cout 参数i越界出错! endl;exit(0);return listi;/返回取到的元素/ExamTest1.cpp#include #include typedef int DataType;/定义具体问题元素的数据类型#include SeqList.hvoid main(void)SeqList myList(100);/定义顺序表类对象myListint n = 10, x; for(int i = 0; i n; i+) /在myList中顺序插入10个元素cout “请输入插入元素x的值”x;mylist.Insert(x,i);myList.Delete(4);/删除myList中数据元素5for(i = 0; i myList.Size(); i+)/依次取myList中的元素并显示cout myList.GetData(i) ;分析讨论:问题1:请分析上述主函数的功能及运行结果;问题2:完成P41例2-2建立学生情况表实验。/ExamTest2.cpp#include #include struct StudentTypelong number;/学号数据项char name10;/姓名数据项char sex3;/性别数据项int age;/年龄数据项;/结构体StudentTypetypedef StudentType DataType;/定义DataType为StudentType数据类型#include SeqList.h/包含顺序表文件void main(void)SeqList myList(100);StudentType x3 = 2000001, 张三, 男, 20, 2000002, 李四, 男, 21,2000003, 王五, 女, 22;int n = 3;DataType s; for(int i = 0; i n; i+) /在myList中顺序插入n个元素myList.Insert(xi, i);for(i = 0; i myList.Size(); i+)/依次取myList中的元素并显示s = myList.GetData(i);cout s.number s.sex s.age endl;实验二:线性表链式存储(单链表类)的建立、插入、删除等操作的实现/LinList.htemplate class LinList;/前视定义,否则友元无法定义template /模板类型为Tclass ListNodefriend class LinList;/定义类LinList为友元private:ListNode *next; /指向下一结点的指针T data;/定义为公有成员方便使用public:/构造函数1,用于构造头结点ListNode(ListNode *ptrNext = NULL)next = ptrNext;/构造函数2,用于构造其他结点ListNode(const T& item, ListNode *ptrNext = NULL)data = item;next = ptrNext;ListNode(void)/析构函数;/单链表类的定义template class LinListprivate:ListNode *head;/头指针int size;/当前的数据元素个数ListNode *Index(int i);/定位public:LinList(void);/构造函数LinList(void);/析构函数int ListSize(void) const;/取当前数据元素个数void Insert(const T& item, int i);/前插T Delete(int i);/删除T GetData(int i);/取元素; /单链表类的实现 template LinList:LinList(void)/构造函数head = new ListNode();/头指针指向头结点size = 0;/size的初值为0template LinList:LinList(void)/析构函数 ListNode *p, *q;p = head;/p指向第一个结点while(p != NULL)/循环释放结点空间直至初始化状态q = p;p = p-next;delete q;size = 0;/结点个数置为初始化值0head = NULL;template ListNode *LinList:Index(int i)/定位/返回指向第i个数据元素结点的指针/参数i的取值范围为:-1isize-1;i=-1时返回头指针if(i size-1)cout 参数i越界出错! endl;exit(0);if(i = -1) return head;/i为-1时返回头指针headListNode *p = head-next;/p指向第一个数据元素结点int j = 0;/从0开始计数while(p != NULL & j next;j+;return p;/返回第i个结点的指针template int LinList:ListSize(void) const/取当前数据元素个数并返回return size;template void LinList:Insert(const T& item, int i)/插入/在第i个结点后插入一个元素值为item的新结点/参数i的取值范围为:0isizeif(i size)cout 参数i越界出错! endl;exit(0);ListNode *p = Index(i - 1);/p为指向第i-1个结点的指针/构造新结点p,p的data域值为item,next域值为 p-nextListNode *q = new ListNode(item, p-next);p-next = q;/新结点插入第i个结点前size+;/元素个数加1template T LinList:Delete(int i)/删除/删除第i个数据元素并返回。参数i的取值范围为:0isize-1if(size = 0) cout 链表已空无元素可删! endl;exit(0);if(i size-1)cout 参数i越界出错! endl;exit(0);ListNode *s, *p = Index(i - 1);/p为指向第i-1个结点指针s = p-next;/s指向第i个结点p-next = p-next-next;/第i个结点脱链T x = s-data;delete s;/释放第i个结点空间size-;/结点个数减1return x;/返回第i个结点的data域值template T LinList:GetData(int i)/取数据元素/取第i个数据元素并返回。参数i的取值范围为:0isize-1if(i size-1)cout 参数i越界出错! endl;exit(0);ListNode *p = Index(i);/p指向第i个结点return p-data;/ExamTest3.cpp#include #include #include LinList.hvoid main(void) LinList myList; Int s=10,20,30,40,50,60,70,80,90,100,n=10;Int temp;For(int I=0;In;I+) MyList.Insert(sI,I); MyList.Delete(4);For(I=0;ImyList.Size();I+) temp=myList.GetData(i); couttemp” “;问题1:请分析上述主函数的功能及运行结果;实验三:各种排序算法的实验/sort.h#include #include void InsertSort (DataType a, int n)/用直接插入法对a0-an-1排序int i, j;DataType temp;for(i=0; i -1 & temp.key = aj.key)aj+1 = aj;j-;aj+1 = temp;void ShellSort (datatype a, int n, int d, int numOfD)/用希尔排序法对记录a0-an-1排序/各组内采用直接插入法排序int i, j, k, m, span;datatype temp;for(m = 0; m numOfD; m+)span = dm;for(k = 0; k span; k+)for(i = k; i -1 & temp.key = aj.key)aj+span = aj;j = j-span;aj+span = temp;void SelectSort(datatype a, int n)/*用直接选择排序法对a0-an-1排序*/int i, j, small;datatype temp;for(i=0; i n-1; i+)small = i;for(j = i+1; j n; j+)if(aj.key asmall.key) small=j;if(small != i)temp = ai;ai = asmall;asmall = temp;void BubbleSort(datatype a, int n)/用冒泡排序法对a0-an-1排序int i, j, flag=1;datatype temp;for(i = 1; i n & flag = 1; i+)flag = 0;for(j = 0; j aj+1.key)flag = 1;temp = aj;aj = aj+1;aj+1 = temp;void QuickSort(datatype a, int low, int high)/用递归方法对对象alow-ahigh进行快速排序int i, j;datatype temp;i = low;j = high;temp = alow;while(i j)/在数组的右端扫描while(i j & temp.key = aj.key) j-;if(i j)ai = aj;i+;/在数组的左端扫描while(i j & ai.key temp.key) i+;if(i j)aj = ai;j-;ai = temp;/对子对象数组进行递归快速排序if(low i) QuickSort(a, low, i-1);if(i high) QuickSort(a, j+1, high);void Merge(DataType a, int n, DataType swap, int k)/k为有序子数组的长度,一次二路归并排序后的有序子序列存于数组swap中int m = 0, u1,l2,i,j,u2;int l1 = 0;/第一个有序子数组下界为0while(l1+k = n-1)l2 = l1 + k;/计算第二个有序子数组下界u1 = l2 - 1;/计算第一个有序子数组上界u2 = (l2+k-1 = n-1)? l2+k-1: n-1;/计算第二个有序子数组上界/两个有序子数组合并for(i = l1, j = l2; i = u1 & j = u2; m+)if(ai.key = aj.key)swapm = ai;i+;elseswapm=aj;j+;/子数组2已归并完,将子数组1中剩余的元素存放到数组swap中while(i = u1)swapm = ai;m+;i+;/子数组1已归并完,将子数组2中剩余的元素存放到数组swap中while(j = u2)swapm = aj;m+;j+;l1 = u2 + 1;/将原始数组中只够一组的数据元素顺序存放到数组swap中for(i = l1; i n; i+, m+) swapm = ai;void MergeSort(DataType a, int n)int i, k = 1;/归并长度从1开始DataType *swap = new DataTypen;/申请动态数组空间while(k n)Merge(a, n, swap, k);/调用归并函数Merge(a, n, swap, k)for(i = 0; i n;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 景德镇市中石化2025秋招面试半结构化模拟题及答案油气储运与管道岗
- 马鞍山市中石化2025秋招笔试模拟题含答案数智化与信息工程岗
- 中国移动十堰市2025秋招写作案例分析万能模板直接套用
- 中国移动三明市2025秋招行业解决方案岗位专业追问清单及参考回答
- 无锡市中储粮2025秋招笔试性格测评题专练及答案
- 漯河市中储粮2025秋招安全环保岗高频笔试题库含答案
- 国家能源滨州市2025秋招面试专业追问及参考交通运输岗位
- 三门峡市中石化2025秋招笔试模拟题含答案油田勘探开发岗
- 黑河市中石油2025秋招笔试提升练习题含答案
- 中国联通东莞市2025秋招笔试行测题库及答案计算机类
- 2025年核电池行业研究报告及未来发展趋势预测
- 语文园地三 教学设计 2025-2026学年小学语文一年级上册 统编版
- 2025重庆机场集团有限公司社会招聘150人(第二次)考试参考题库及答案解析
- 2025年汽车制造业供应链风险管理案例分析报告
- 社区精神障碍工作总结
- 2025北京房山区区直部门和乡镇(街道)全日制临聘人员招聘37人考试参考题库及答案解析
- 技术方案评审与验收标准模板
- 镀膜车间安全培训课件
- 中水资源化综合利用建设项目规划设计方案
- 政府采购管理 课件 第十三章 政府采购绩效评价
- 机场安检危险品运输课件
评论
0/150
提交评论