数据结构实验指导书1-10
2.线性表的链表存储表示(结构)及实现。
参照教材P35页例2-3,编程实现单链表(带头结点)的存储与操作。
注意几个问题:
(1)关于线性表的链表存储结构的本质是:在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中可以不相邻,既地址不连续。不同的教材的表示基本是一致的。
*********************************************
1、建立单链表
2、求当前数据元素个数
3、在i位置插入元素x
4、删除第i个元素,并返回其值
5、取i位置数据元素
6、结束程序运行
*********************************************
(2)编写实现矩阵相加C=A+B的函数。
(3)编写实现矩阵乘C=A*B的函数。
(4)编写矩阵元素显示函数。
(5)以下面的数据为测试例子,编写一个主函数进行测试。
2、稀疏矩阵设计。
基本要求:
(1)采用三元组十字链表结构存储稀疏矩阵。
(2)求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。
(3)求A的转置矩阵D,并输出D。
(2)输出每个学生在本班的排名情况,具有相同成绩的名次相同。
(3)输出全体考生的排名情况。
测试数据:
假定有7个班,每个班学生人数为12人;学号为“班号”+“学生在本班名册中的序号”,班号依次为1,2,…,7;成绩是由计算机随机产生的50~100之间的整数。
一、实验目的
掌握几种典型的查找方法(折半查找、二叉排序树的查找、哈希查找),并对各种算法的特点、使用范围和效率有进一步的了解。
注意几个问题:
(1)关于线性表的顺序存储结构的本质是:在逻辑上相邻的两个数据元素ai-1,ai,在存储地址中也是相邻的,既地址连续。不同的教材有不同的表示,有的直接采用一维数组,这种方法有些过时。有的采用含‘动态分配’一维数组的结构体,这种方法比较灵活抽象。在此本书中采用的是含‘静态’一维数组和线性表长的结构体:
一、实验目的
1.掌握栈的存储结构,并能在现实生活中灵活运用。
2.掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。
3.了解和掌握递归程序设计的基本原理和方法。
二、实验内容
1、中值表达式求值问题。
要求:(1)先设计一个函数把中缀算术表达式转换为后缀算述表达式。
(2)再设计一个函数实现后缀表达式的求值计算。
(3)设计一个主函数进行测试。
2、利用循环队列模拟舞伴配对问题:
(1)在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。
(2)假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。试模拟解决上述舞伴配对问题。
*********************************************
1、建立顺序表
2、求当前数据元素个数
3、在i位置插入元素x
4、删除第i个元素,并返回其值
5、取i位置数据元素
6、结束程序运行
*********************************************
一、实验目的:
1、熟练掌握二叉树的存储结构、基本操作与常用遍历方法;
2、了解二叉树的层序遍历;
3、掌握线索二叉树概念及其应用;
4、用树解决实际问题,如哈夫曼编码等。
二、实验内容:
1、二叉树问题。(参照教材P183例8-2)
要求:
(1)采用二叉链存储结构;
(2)根据输入的数据建立一个二叉树;
(3)判断该二叉树是否是一棵完全二叉树;
2、广义表设计。(参照教材P164例7-3)
要求:
(1)采用原子和子表存储结构。
(2)分别编写广义表的创建、求广义表深度、求广义表原子数据元素个数、求广义表长度、查找原子元素和撤消广义表操作的函数。
(3)编写主函数进行测试,设E=(((a,b,c),(d)),e),创建初始值等于E的广义表。
(4)在主函数中分别求出广义表E的深度、长度、和原子元素个数。
二、实验内容
1、哈希表设计。
问题描述:已知一个含有1000个数据元素的表,关键字为中国人姓氏的拼音,给出此表的一个哈希表设计方案。
基本要求:
(1)要求解决哈希冲突的方法采用链表法。
(2)编写一个测试主函数
(3)要求出所设计的哈希表在等概率情况下的平均查找长度。
2、二叉排序树问题。
问题描述与基本要求:
(2)将字符串string2的头n个字符添加到string1的尾部,输出结果。
(3)查找字符串string3在string1中的位置,若string3在string1中不存在,则插入string3在string1的m位置上,输出结果。
测试数据:
(1)string1:“typedefstructArcBox”
(3)[测试数据]用下表中给出的字符集和频度的实际统计数据建立哈夫曼树:
字符
A
B
C
D
E
F
G
H
I
J
K
L
M
N
频度
64
13
22
32
103
21
15
47
57
1
5
32
20
57
字符
O
P
Q
R
S
T
U
V
W
X
Y
Z
空格
频度
63
15
1
48
51
80
23
8
18
1
16
1
168
(4)并实现以下报文的译码和输出:“THIS PROGRAM IS MY FAVORITE”。
(4)输出二叉树(输出的结果应为树型结构);
(5)输出其层序遍历的结果。
2、哈夫曼树问题。(参照教材P198例8-4)
要求:
(1)从终端读入字符集大小n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。并将它存于文件Haffman.h中。
(2)利用已建好的哈夫曼编码,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。
(4)测试数据:以教材P250图9-22所示的有向带权图为例,以结点v1作为源点,求从结点v1到其余各结点的最短路径和最短路径长度值。
一、实验目的
1、熟悉几种典型的排序算法的思想与特点;
2、熟悉各种排序算法的性能;
3、学会运用排序算法解决实际应用问题。
二、实验内容
1、排序算法性能比较。
要求:
(1)用随机数产生100,000个待排序数据元素的关键字值。
(2)编写一主函数,测试下列各排序函数的机器执行实际时间:
(直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、二路归并排序、基于链式队列的基数排序)
2、学生成绩排序。
问题描述:有M个班的学生参加某门课程的考试,每个班最多有N个学生,输出每个学生在本班以及全班考中的排名表。
要求:
(1)每个班的学生记录按学号顺序排列,每个学生记录包含名次、学号、姓名、成绩。
实验一、线性表基本操作
一、实验目的
1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。
2.重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。
二、实验内容
1.线性表的顺序存储表示(结构)及实现。
参照教材P23页例2-1,编程实现顺序表的存储与叉树是否为二叉排序树的函数,设此二叉树以二叉链表作存储结构,且树中结点的关键字值均不相同。
(3)编写一个测试主函数进行测试。
提示:包含二叉排序树头文件BiSortTree.h
(2)设计邻接表存储结构的深度优先或广度优先遍历函数,并以教材P249图9-20为例,编写主函数进行测试。
2、单源点最短路径问题。
问题描述:求从有向图的某一结点出发到其余各结点的最短路径。
要求:
(1)有向图采用邻接矩阵表示;
(2)单源结点最短路径问题采用Dijkstra算法;
(3)输出有向图中从源结点到其余各结点的最短路径与最短路径值。
string2:“VertexTypedata”
string3:“data”
(2)string1:“structArcBox”
string2:“VertexType”
string3:“Box”
2、字符串加密。
问题描述:一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
abcdefghijklmnopqrstuvwxyz
(2)需解密文本串为”tkzwsdf”,解密后应为“encrypt”。
一、实验目的
1、熟悉对称矩阵的存储与压缩,运用它们进行矩阵简单运算处理。
2、熟悉稀疏矩阵的“三元组顺序表”和“三元组链表”存储结构,运用它们进行矩阵简单运算处理。
二、实验内容
1、压缩存储矩阵设计。
要求:
(1)设矩阵A、矩阵B和矩阵C均为压缩存储方式存储的n阶上三角矩阵,矩阵元素均为int型。
请输入您的选择(1,2,3,4,5,6):
3.设计循环单链表。
要求:(1)循环单链表的操作包括初始化、求数据元素个数、插入、删除、取数据元素。
(2)设计一测试主函数,实际运行验证所设计的循环单链表的正确性。
一、实验目的
1.深入了解与掌握链表的逻辑结构特性
2.熟练掌握利用线性解决一些实际应用问题。
二、实验内容
typedefstructNode
数据结构实验指导书
《数据结构》实验指导书实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)练习及思考题:(1)顺序表的操作上有什么特点?(2)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。
实验二、链表实验目的:熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。
实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4) 输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
练习及思考题:(1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同?(2)有头结点的链式表,有什么特点?实验三、栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。
实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。
实验内容:(1) 判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。
数据结构实验指导书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.掌握栈(队列)的基本操作:初始化栈(队列)、判栈(队列)为空、出栈(队列)、入栈(队列)等运算。
数据结构实验指导书(国教)
南昌工程学院《数据结构》实验指导书10计算机应用技术(中韩)(专)徐晨光编2012 年 2月目录实验一:C语言相关知识复习实验 (3)实验二:线性表实验 (4)实验三:栈和队列实验 (6)实验四:数组、串 (8)实验五:二叉树实验 (9)实验六:图 (12)实验七:查找实验 (13)实验八:排序 (14)实验一C语言相关知识复习实验一、实验目的巩固复习前期所学C语言的函数参数传递、指针和结构体等知识点,加强学习数据结构语言基础。
二、实验内容1.学生信息的显示,具体要求如下:1)定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址);2)设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构体类型;3)设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数进行显示(学生人数不少于5人)。
提示:可用结构体数组保存学生信息。
2. 输入若干个整数作为数组元素值,然后按输入时顺序的就地逆置排序,最后打印出逆置后的元素值。
要求用指针和动态内存分配方法实现。
例如输入:10 2 30 4 5,逆置后显示为:5 4 30 2 10。
提示:1.逆置的方法:设有n个数据元素a(0),a(1),a(2)…….,a(n-1),将第i个元素与第n-i-1个元素调换位置即可。
2.采用动态内存分配方法可参考如下代码int *a;int i;a=(int *)malloc(N*sizeof(int));//动态分配起始地址for(i=0;i<N;i++){ scanf("%d",&a[i]);}//给内存空间赋值三、实验源代码此处写程序源代码,请在程序中适当注释,便于老师更快地看懂你的程序。
四、实验结果此处写出程序运行的结果,即输入数据是什么,输出数据是什么,分析结果是否正确,如果不正确是什么原因。
实验二线性表实验一、实验目的1、掌握建立顺序表的基本方法。
2、理解和掌握顺序表元素查找算法。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。
《数据结构》实验指导书
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
数据结构实验指导书(本科正式)
《数据结构》实验指导书实验一线性表【实验目的】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、本次实验的结论与体会。
《数据结构》实验指导
《数据结构》实验指导《数据结构》C语言版实验指导目录《数据结构》上机实验的目的和要求 (1)实验一顺序结构线性表的实现 (3)实验二单链表的插入和删除 (16)实验三栈的实现 (24)实验四二叉树操作实现 (30)实验五哈夫曼树的建立与编码实现 (39)实验六图的遍历操作 (50)实验七排序 (67)实验八查找 (83)《数据结构》课程设计 (95)《数据结构》上机实验的目的和要求通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。
实验报告的基本要求为:1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。
5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:列出对于给定的输入所产生的输出结果。
若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。
实验一顺序结构线性表的实现一、目的:掌握顺序表的表示方法,存储结构及其基本操作的实现。
二、要求:建立一顺序表,实现其基本操作。
三、示例程序:说明:一个完整的程序是由输入,处理,输出三部分组成的,每个部分还可以分为若干小部分,如输入,又可以分为声明,初始化变量,接收数据,预处理数据等。
书上列出的算法是解决问题的基本思路,也可以是解决问题的处理过程,并未给出详细的输入与输出,这一部分需要在练习过程中加入,在解决实际问题时,还需要做灵活的处理。
C语言本身有自身的特点,其基本思想是与机器的指令码相关的。
《数据结构》实验指导书(新)
数据结构实验指导书实验一线性表[实验目的]1.了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
[实验内容]1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
[实验要点及说明]线性表(linear list)是n(n≥0)个数据元素a1,a2,…a n组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,a n),其中的数据元素a i(1≤i≤n)是一个抽象的符号,a i是第i个数据元素,称i为数据元素a i在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
可定义顺序表如下:#define maxnumelemtype list[maxnum];int num=-1;线性表的链式存贮结构,也称为链表。
数据结构实验任务指导书
目录前言 (1)实验一熟悉编程环境 (4)实验二顺序表的基本操作 (5)实验三单链表的基本操作 (8)实验四栈的基本操作 (11)实验五队列的基本操作 (13)实验六二叉树建立及遍历操作 (15)实验七二叉树的应用程序设计 (16)实验八图的建立及遍历操作 (17)实验九图的最小生成树算法的实现 (20)实验十图的最短路径算法的实现 (21)实验十一顺序表查找算法的实现 (23)实验十二二叉排序树的查找算法实现 (25)实验十三哈希表的应用实现 (26)实验十四插入排序算法的实现 (27)实验十五交换排序算法的实现 (28)实验十六选择排序算法的实现 (29)综合实践:数据结构课程设计 (31)前言为了同学能够更好的完成实验任务,达到本课程的设置目的,锻炼自己的实践动手能力,请大家认真阅读本前言内容,希望能够给你一定的学习启示。
1.关于实习步骤的要求和建议从以往的教学经验来看,在初学阶段执行严格的实验步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的编成风格,培养严谨、科学、高效的工作方式。
在以往的教学实践中,学生经常出现的问题:(1)实验时间不够,部分学生花两个学时不能找出程序错误(有的同学甚至一个错误都没有找出),一无所获,浪费机时。
(2)没有达到实验要求,在两个机时中没有完成实验任务,不可能体会数据结构的精髓,更不能很好地掌握内容,没有锻炼好独立思考、设计能力,最终没有达到本课程的要求。
本课程独立32学时的实验是验证和考量学生对计算机软件设计基本能力的重要实践环节,独立做好每个实验是本课程的最基本要求。
(3)高级程序设计能力亟待提高,高级语言程序设计(C语言程序设计)是本门课程的编程基础,很多同学编程基础不过关,将大量时间浪费在以往知识的练习中,甚至有个别同学只会编写Hello Word程序,基本功太差。
(4)没有严谨的实验作风,有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。
《数据结构》实验指导书(修订版)
《数据结构》实验指导书;郑州轻工业学院目录&前言 (3)实验01 顺序表的基本操作 (7)实验02 单链表的基本操作 (19)实验03 栈的基本操作 (32)实验04 队列的基本操作 (35)实验05 二叉树的基本操作 (38)实验06 哈夫曼编码 (40)实验07 图的两种存储和遍历 (42)实验08 最小生成树、拓扑排序和最短路径 (46)实验09 二叉排序树的基本操作 (48)实验10 哈希表的生成 (50)>实验11 常用的内部排序算法 (52)附:实验报告模板 (54)前言《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。
它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。
这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。
通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。
另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。
学习这门课程,习题和实验是两个关键环节。
学生理解算法,上机实验是最佳的途径之一。
因此,实验环节的好坏是学生能否学好《数据结构》的关键。
为了更好地配合学生实验,特编写实验指导书。
一、实验目的本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念和常用的几种数据结构在计算机中的存储和实现的方法,加强学生动手能力;另一方面培养学生从实际问题中抽象出对应的抽象数据类型,进而找到合适的计算机存储方法和算法,为以后课程的学习、大型软件的开发、实际工程问题打下良好的软件开发基础。
