《数据结构》实验指导书

合集下载

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书实验一顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。

实验内容:1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求:(1)设数据元素为整数,实现线性表的顺序存储表示。

(2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。

(3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。

2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求:(1)数据元素为学生成绩(含姓名、成绩等字段)。

(2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。

(这里用于比较的字段为分数)实验二链表实验目的:熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。

实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容:1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下:(1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。

(2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表并带有头结点。

(用于比较的字段为分数)。

(3)输入关键字值x,打印出表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(4)输入关键字值x,删除表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。

(用于比较的字段为分数)。

实验三栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。

实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。

实验内容:(1)判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。

数据结构实验-实验指导书

数据结构实验-实验指导书

实验一线性表操作一、实验目的1熟悉并掌握线性表的逻辑结构、物理结构。

2熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。

3熟悉VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。

4熟悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题:1对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。

加强、提高题:2、编写一个求解Josephus问题的函数。

用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人。

然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。

最后分析所完成算法的时间复杂度。

定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。

(可以选做其中之一)加强题:(1)采用数组作为求解过程中使用的数据结构。

提高题:(2)采用循环链表作为求解过程中使用的数据结构。

运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。

实验二栈、队列、递归应用一、实验目的1熟悉栈、队列这种特殊线性结构的特性2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。

二、实验要求1实验之前认真准备,编写好源程序。

2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3不断积累程序的调试方法。

三、实验内容基本题(必做):1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。

2、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。

加强题:3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。

2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。

3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。

二、实验环境1、操作系统:Windows 或 Linux 操作系统。

2、编程语言:C、C++、Java 等编程语言中的一种。

3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。

三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。

2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。

3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。

四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。

利用栈解决表达式求值、括号匹配等问题。

2、队列的实现与应用实现顺序队列和链式队列。

利用队列解决排队问题、广度优先搜索等问题。

(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。

实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。

2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书实验1:顺序表基本操作一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。

2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。

3.掌握对多函数程序的输入、编辑、调试和运行过程。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对顺序表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。

(2)将La置为空表。

(3)销毁La。

(4)在La中插入一个新的元素。

(5)删除La中的某一元素。

(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。

(7)打印输出La中的元素值。

2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。

(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。

(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。

四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。

2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对单链表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

4.整理并上交实验报告。

三、实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。

(2)在La中插入一个新结点。

(3)删除La中的某一个结点。

(4)在La中查找某结点并返回其位置。

数据结构实验指导书new(完整版)

数据结构实验指导书new(完整版)

数据结构实验指导书实验一线性表的创建与应用一、实验目的1、掌握线性表的定义2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在链接存储结构上的运算。

二、实验内容1、阅读并运行本实验程序(有序顺序表实现)2、用单链表方式实现本程序相应功能(有序单链表)3、利用有序单链表实现一元多项式的加法的功能。

三、实验要求1、认真阅读和掌握本实验的参考程序(有序顺序表)。

2、上机运行该程序。

3、保存和打印出程序的运行结果,并结合程序进行分析。

4、按照有序顺序表功能,重新改写程序并运行,打印出文件清单和运行结果5、创建有序单链表时,要用头插法和尾插法同时实现。

6、实现一元多项式的加法的功能,并输出结果。

7、最好能将结果写入到文本文件中。

四、注意事项:1、实验学时:4学时2、实验完成一周内提交实验报告(实验报告本)3、实验结果要求抓图打印4、严禁抄袭五、实验附件程序(有序顺序表)Odsqlist.h文件:#define LIST_INIT_SIZE 8 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量#define OVERFLOW -2#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int Status;typedef int ElemType;typedef struct {ElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)}SqList; // 俗称顺序表typedef SqList OdSqList; //有序顺序表Status InitList(OdSqList&); // 结构初始化void Destroy(OdSqList&); //销毁有序顺序表void ClearList(OdSqList&);//清空有序表Status ListEmpty(OdSqList);//判有序表为空int ListLength(OdSqList);//求表长int LocateElem(OdSqList,ElemType); // 查找void ListInsert(OdSqList&,ElemType); // 插入元素Status ListDelete(OdSqList&, int,ElemType& ); // 删除元素int ListDeletem(OdSqList&L, ElemType e); // 删除所有值为e的元素,返回删除的元素个数int ListDeletemn(OdSqList&, ElemType, ElemType ); // 删除所有值界于mink~maxk的元素,并返回删除的元素个数void ListTraverse(OdSqList);//遍历非递减有序线性表odsqlist.cpp文件:#include<stdio.h>#include<stdlib.h>#include "odsqlist.h"Status InitList( OdSqList& L ){// 构造一个空的线性表L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType));if (!L.elem)exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;} // InitListvoid ListTraverse(OdSqList L){//遍历线性表int i;printf("listsize is %d.\n",L.listsize);printf("listlength is %d.\n",L.length);printf("the list is:(");for(i=1;i<=L.length;i++)printf("%d ",L.elem[i-1]);printf(")\n");}int LocateElem(OdSqList L, ElemType e){// 在顺序表中查询第一个满足判定条件的数据元素,若存在,则返回它的位序,否则返回 0int i;i = 1; // i 的初值为第 1 元素的位序ElemType *p;p = L.elem; // p 的初值为第 1 元素的存储位置while (i <= L.length && *p++!=e) ++i;if (i <= L.length) return i;else return 0;}void ListInsert(OdSqList &L, ElemType e) {// 在顺序表L中保序插入新的元素eElemType *newbase,*p,*q;if (L.length >= L.listsize) { // 当前存储空间已满,增加分配newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType));if (!newbase) exit(OVERFLOW);// 存储分配失败L.elem = newbase; // 新基址L.listsize += LISTINCREMENT; // 增加存储容量}q = &(L.elem[0]); // q 指示第1个元素位置for (p = &(L.elem[L.length-1]);p>=q&&*p>e; --p)*(p+1) = *p; // 插入位置及之后的元素右移*(p+1) = e; // 插入e++L.length; // 表长增1}Status ListDelete(OdSqList &L, int i, ElemType &e) {ElemType *p,*q;if ((i < 1) || (i > L.length)) return ERROR;// 删除位置不合法p = &(L.elem[i-1]); // p 为被删除元素的位置e = *p; // 被删除元素的值赋给 eq = L.elem+L.length-1; // 表尾元素的位置for (++p; p <= q; ++p) *(p-1) = *p;// 被删除元素之后的元素左移--L.length; // 表长减1return OK;}void Destroy(OdSqList& L){//销毁有序顺序表free(L.elem);}void ClearList(OdSqList& L){//清空有序表L.length=0;}Status ListEmpty(OdSqList L){//判有序表为空if(L.length==0)return TRUE;else return FALSE;}int ListLength(OdSqList L){//求表长return L.length;}int ListDeletem(OdSqList& L, ElemType e){// 删除所有值为e的元素,返回删除的元素个数ElemType *p,*q,*r;int i=0;//删除的元素个数p=&L.elem[0];//扫描指针for(q=&L.elem[L.length-1];*p<e&&p<=q;p++);if(p<=q&&*p==e){i++;for(r=p+1;*r==e&&r<=q;r++,i++);if(r<=q)for(;r<=q;r++,p++)*p=*r;}L.length-=i;return i;}int ListDeletemn(OdSqList& L, ElemType mink, ElemType maxk){// 删除所有值界于mink~maxk的元素,并返回删除的元素个数ElemType *p,*q,*r,temp;int i=0;if(maxk<mink){temp=maxk;maxk=mink;mink=temp;}p=&L.elem[0];for(q=&L.elem[L.length-1];*p<mink&&p<=q;p++);//p指针指向第1个大于等于mink的元素if(p<=q&&*p<=maxk){//若*p小于等于maxki++;for(r=p+1;*r<=maxk&&r<=q;r++,i++);//r指针指向第1个大于maxk的元素if(r<=q)for(;r<=q;r++,p++)*p=*r;}L.length-=i;return i;}app.cpp文件:#include<stdio.h>#include<stdlib.h>#include "odsqlist.h"void main(){OdSqList L;int k;char i;ElemType e,mink,maxk;printf("OdSqList is init……\n");i=InitList(L);ListTraverse(L);while(1){printf("\n\nplease select:\n");printf("1------insert\n");printf("2------traverse\n");printf("3------deletei\n");printf("4------deletek\n");printf("5------deletemink-maxk\n");printf("6------locate\n");printf("7------isempty\n");printf("8------length\n");printf("9------clearlist\n");printf("0------quit\n");scanf("%d",&k);switch(k){case 1:printf("please input e:");scanf("%d",&e);ListInsert(L,e);ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 2:ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 3:while(1){printf("please input delete i:");scanf("%d",&i);if(ListDelete(L,i,e)==ERROR)printf("delete positon is error!\n");else {printf("Deleted elem is %d\n",e);break;}}ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 4:printf("please input delete e:");scanf("%d",&e);ListTraverse(L);printf("%d elem is deleted.\n",ListDeletem(L,e));ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 5:printf("please input delete mink and maxk:");scanf("%d%d",&mink,&maxk);ListTraverse(L);printf("%d elem is deleted.\n",ListDeletemn(L,mink,maxk));ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 6:printf("please input locate e:");scanf("%d",&e);i=LocateElem(L,e);if(i==0)printf("locate Defaulted!\n");elseprintf("located no. is %d\n",i);ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 7:if(ListEmpty(L))printf("the orderlist is empty!\n");elseprintf("the orderlist is not empty!\n");scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 8:printf("length is %d.\n",ListLength(L));scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 9:ClearList(L);printf("the orderlist is empty!\n");scanf("%c",&i);print f("please press any key to continue……");scanf("%c",&i);break;case 0:Destroy(L);exit(1);break;}}}实验二栈(队列)的创建与应用一、实验目的1.掌握栈(队列)的基本操作:初始化栈(队列)、判栈(队列)为空、出栈(队列)、入栈(队列)等运算。

数据结构 实验指导书

数据结构 实验指导书

数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)上机实验题目 (3)实验一 C语言相关知识复习 (3)一、实验目的 (3)二、实验内容 (3)实验二单链表的插入、删除 (3)一、实验目的 (3)二、实验内容 (3)三、实现提示 (4)实验三栈及其应用 (5)一、实验目的 (5)二、实验内容 (5)实验四二叉树的递归算法 (6)一、实验目的 (6)二、实验内容 (6)实验五图的遍历 (7)一、实验目的 (7)二、实验内容 (7)实验六有序表的查找 (7)一、实验目的 (7)二、实验内容 (7)实验七哈希表 (7)一、实验目的 (7)二、实验内容 (7)实验八内部排序算法的应用 (8)一、实验目的 (8)二、实验内容 (8)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。

本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。

由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。

上机实践是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通过上机实践,使学生在可能短的时间内对数据结构知识的实践和应用有一个比较全面和系统的认识,达到理论与实践相结合的目的。

数据结构-实验指导书

数据结构-实验指导书

《数据结构》实验指导书计算机专业实验中心编2020年7月25日目录《数据结构》上机实验内容和要求............................. 错误!未定义书签。

实验一、顺序表的实现及应用................................. 错误!未定义书签。

实验二、链表的实现及应用................................... 错误!未定义书签。

实验三、栈的实现及应用..................................... 错误!未定义书签。

实验四、队列的实现及应用................................... 错误!未定义书签。

实验五、二叉树操作及应用................................... 错误!未定义书签。

实验六、图的遍历操作及应用................................. 错误!未定义书签。

实验七、查找算法的实现..................................... 错误!未定义书签。

实验八、排序算法的实现..................................... 错误!未定义书签。

《数据结构》上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。

本实验指导书适用于16学时《数据结构》实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。

实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。

3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。

数据结构实验指导书(本科正式)

数据结构实验指导书(本科正式)

《数据结构》实验指导书实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。

【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南阳理工学院《数据结构》实验指导书(2014版)软件学院·软件工程教研室2014.8目录实验1 线性表及其应用 (1)实验2 栈和队列的实现 (4)实验3 树和二叉树 (7)实验4图 (9)实验5 查找 (11)实验6 排序 (13)实验1 线性表及其应用实验性质:验证性实验学时:2学时一、实验目的1.掌握线性表的顺序存储结构在计算机的表示方法及其基本操作的实现;2.掌握线性表的链式存储结构在计算机的表示方法及其基本操作的实现;3.能够利用线性表结构对实际问题进行分析建模,利用计算机求解。

二、实验预备知识1.复习C/C++语言相关知识(如:结构体的定义、typedef的使用、函数的定义、调用及参数传递方式);2.阅读并掌握顺序表与链表的类型定义及其查找、插入、删除等基本操作。

三、实验内容1.理解并分别用顺序表、链表的操作运行下列程序:#include <iostream>using namespace std;#include "Status.h"typedef int ElemType;#include "SqList.h" //用#include "LinkList.h"替换void main(){SqList L; //用LinkList L;替换,与#include "LinkList.h"配合int n,i;ElemType e;InitList(L);cout<<"\nL=";ListTraverse(L);cout<<"\n请设置将向线性表L中输入的元素个数:";cin>>n;CreateList(L,n);cout<<"\nL=";ListTraverse(L);cout<<"\nL的表长为:"<<ListLength(L)<<endl;cout<<"\n请输入想要获取的元素位序:";cin>>i;if(GetElem(L,i,e)) cout<<"\n第"<<i<<"个元素为:"<<e<<endl;else cout<<"\n第"<<i<<"个元素不存在!"<<endl;cout<<"\n请输入要查找的元素:";cin>>e;if(i=LocateElem(L,e)) cout<<"\n元素"<<e<<"的位置为:"<<i<<endl;else cout<<"\n元素"<<e<<"不存在!"<<endl;cout<<"\n请输入插入位置和所插入元素:";cin>>i>>e;if(ListInsert(L,i,e)){cout<<"\nL=";ListTraverse(L);}else cout<<"\n插入操作失败!"<<endl;cout<<"\n请输入被删元素的位置:";cin>>i;if(ListDelete(L,i,e)) cout<<"\n被删元素为:"<<e<<endl;else cout<<"\n删除操作失败!"<<endl;cout<<"\nL=";ListTraverse(L);}本题目说明:(1)头文件Status.h的内容如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;(2)头文件SqList.h(内容包括顺序表的结构定义及基本操作实现)。

(3)头文件LinkList.h(内容包括链表的结构定义及基本操作实现)。

(4)顺序表中基本操作的补充:● CreateList(&L,n):向顺序表L中输入n个元素(0≤n≤MAXSIZE)。

Status CreateList(SqList &L,int n){int i;if(!L.elem||n<0||n>MAXSIZE) return ERROR;cout<<"\n请输入"<<n<<"个元素:";for(i=1;i<=n;i++)cin>>L.elem[i-1]; //可以用随机函数rand()自动生成L.length=n;return OK;}● ListTraverse(L):以线性表的记录形式遍历输出顺序表L,例如:(a1,a2,…,ai,…an)。

void ListTraverse(SqList L){int i;cout<<'(';for(i=1;i<=L.length;i++)cout<<L.elem[i-1]<<',';if(L.length) cout<<"\b)"<<endl;else cout<<')'<<endl;}2.设计实现一个算法,用以对两个非递减有序表A、B进行合并,其中A=(2,5,8,9) ,B=(3,4,8,10,12,20)。

3.(任选题)已知有两个多项式P(x)和Q(x),基于链表设计算法实现P(x)+Q(x)运算,而且不重新开辟存储空间。

实验2 栈和队列的实现实验性质:验证性实验学时:2学时一、实验目的1.掌握栈的特点、在计算机中的存储表示方法及其基本操作的实现;2.掌握队列的特点、在计算机中的存储表示方法及其基本操作的实现;3.能够利用栈和队列求解一些常见问题。

二、实验预备知识1.阅读并掌握顺序栈、链栈两种存储方法的类型定义及其压栈、弹栈等基本操作。

2.阅读并掌握循环队列、链队列两种存储方法的类型定义及其入队、出队等基本操作。

三、实验内容1.理解并用顺序栈操作运行下列程序:#include <iostream>using namespace std;#include "Status.h"typedef int ElemType;#include "SqStack.h"void main(){SqStack S;ElemType e;InitStack(S);Push(S,2);Push(S,4);Push(S,6);Push(S,8);cout<<"\n由栈底至栈顶的元素为:";StackTraverse(S);cout<<"\n栈的长度为:"<<StackLength(S)<<endl;GetTop(S,e);cout<<"\n栈顶元素为:"<<e<<endl;Pop(S,e);cout<<"\n由栈底至栈顶的元素为:";StackTraverse(S);cout<<"\n栈的长度为:"<<StackLength(S)<<endl;GetTop(S,e);cout<<"\n栈顶元素为:"<<e<<endl;}2.理解并用循环队列、链队列操作运行下列程序:#include <iostream>using namespace std;#include "Status.h"typedef int ElemType;#include "SqQueue.h"void main(){SqQueue Q;ElemType e;InitQueue(Q);EnQueue(Q,1);EnQueue(Q,3);EnQueue(Q,5);EnQueue(Q,7);GetHead(Q,e);cout<<"\n队头元素为:"<<e<<endl;cout<<"\n队列中从队头至队尾的元素为:";QueueTraverse(Q);cout<<"\n队列的长度为:"<<QueueLength(Q)<<endl;DeQueue(Q,e);cout<<"\n出队的元素为:"<<e<<endl;cout<<"\n出队操作完成之后队列中从队头至队尾的元素为:";QueueTraverse(Q);cout<<"\n队列的长度为:"<<QueueLength(Q)<<endl;}本题目说明:(1)头文件Status.h的内容同实验1。

(2)头文件SqStack.h(内容包括顺序栈的结构定义及基本操作实现)。

(3)头文件SqQueue.h(内容包括循环队列的结构定义及基本操作实现)。

(4)顺序栈中基本操作的补充:●StackTraverse(S):从栈底到栈顶依次对S的每个数据元素进行访问。

void StackTraverse(SqStack S){ElemType *p;p=S.base;while(p!=S.top){cout<<*p++<<" ";}cout<<endl;}(5)循环队列中基本操作的补充:●QueueTraverse(L):从队头到队尾,依次对Q的每个数据元素访问。

相关文档
最新文档