《数据结构实验.ppt》由会员分享,可在线阅读,更多相关《数据结构实验.ppt(38页珍藏版)》请在课桌文档上搜索。
1、实验一 C语言复习,教学目的与要求 本实验的目的是帮助大家复习C语言的使用方法,特别是指针、结构体的内容,同时也为以后的各个实验做准备 教学的重点与难点 指针、结构体、数组三种数据类型的混合使用,实验预习检查内容,指针指向数组后,数组元素的访问有哪些形式?在下列类型定义后,表达式a3.num的逻辑含义是什么?类型是什么?struct studentlong num;float score;struct student*next;a5;,答:3号元素的num数据域long类型,例题,#define NULL 0struct studentlong num;float score;struct s
2、tudent*next;main()struct student a,b,c,*head,*p;a.num=99101;a.score=89.5;b.num=99103;b.score=90;c.num=99107;c.score=85;/a、b、c变量赋值,head=&a;a.next=&b;/a的后续为bb.next=&c;c.next=NULL;p=head;do printf(“%ld%5.1fn”,p-num,p-score);/*输出学号和成绩*/p=p-next;while();,答:p!=NULL,9、设计一个可进行复数运算的演示程序。要求:实现下列六种基本运算:1)由输入的实
3、部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部。运算结果以相应的复数或实数的表示形式显示。10、设计一个可进行有理数运算的演示程序。要求:实现两个有理数相加、相减、相乘以及求分子或求分母的运算。,实验内容及要求,有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据。要求:用input函数输入10个学生数据,用average 函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。,实验内容及要
4、求,讨论,指出下列程序段的错误:struct studentlong num;float score;struct student*next;a,b,c,*p;a.next=,答:增加:c.next=NULL;p=a;=P=,第二讲 线性表,教学目的与要求 掌握数据结构中表的基本概念。熟练掌握线性表的基本操作,插入、删除、查找等运算在顺序存储结构和链接存储结构上的实现。熟练掌握链表的各种操作和应用。教学的重点与难点线性表的基本操作在链接存储结构上的实现。,实验预习检查内容,完成下列程序,指出main的结构#include#define MaxLen 50typedef int elemtype
5、;struct datatype elemtype*elem;int length;typedef struct datatype sqlist;,void create(sqlist*a)int i,n;a-elem=(elemtype*)malloc(MaxLen*sizeof(elemtype);printf(“创建一个顺序表n”);printf(“输入元素个数:”);scanf(“%d,&a-length);for(i=0;ilength;i+)printf(“输入第%d个元素值:”,i);scanf(“%d,a-elem+i);,void invert(sqlist*a)int m=
6、a-length/2,I;elemtype temp;for(I=0;Ielem+i)=;=temp;,(1)*(a-elem+i)(2)*(a-elem+a-length-1-i)(3)*(a-elem+a-length-1-i),Void disp(sqlist*a)int I;for(i=0;ielem+i);,void main()sqlist b,*a;a=create(a);disp(a);invert(a);disp(a);,实验内容及要求,4、7、13必做,其余老师选做几题 4、键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出各结点中的数据。注
7、:试以顺序表和单链表两种不同的存储结构实现。,7、设计一个算法求A和B两个单链表表示的集合的并集。提示:将A和B合并。9、用头插法把单链表b中在单链表a中未出现的结点合并到单链表a中。,实验三 栈和队列,教学目的与要求了解栈和队列的特性,以便灵活应用。熟练掌握栈和有关队列的各种操作和应用。教学的重点与难点 栈和有关队列的各种操作和应用,实验预习检查内容,1、栈顶指针是栈顶元素的地址或是栈顶前一元素的地址,确定标准是什么?,答:由程序员自己确定,在压栈和弹栈操作时来实现,2、在实际应用中,是采用一般队列还是循环队列的依据是什么?,答:实际应用中,是否存在假溢出问题。,实验内容及要求,3、4必做,
8、5选做3、设一个算术表达式中包含圆括号、方括号和花括号三种类型的括号,编写一个算法判断其中的括号是否匹配。4、到医院看病的过程是,患者先排队等候,排队过程中主要重复两件事:(1)病人到达诊室时,将病历交给护士,排到等候队列中候诊。(2)护士从等候队列中取出下一个患者的病历,该患者进入诊室就诊。,5、设计一个程序,演示用算符优先法对算术表达式求值的过程。基本要求:以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教科书表3.1给出的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例3_1演示在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。测试数据:3*(7
9、-2),实验内容及要求,实验四 串,教学目的与要求掌握串的基本概念,存储方法及主要运算。将串的运算应用到文本编辑中。教学的重点与难点 子串的操作,实验预习检查内容,串的顺序存储结构包括哪两种存储方式?,答:静态分配和动态分配的顺序存储结构。,静态分配:typedef struct char chmaxstrlen;int length sstring;,动态分配:typedef struct char*ch;int length;hsring;,实验内容及要求,3、4必做,5选做3、采用顺序结构存储串,编写一个函数index(s1,s2),用于s2是否是s1的子串。若是,返回其在主串中的位置;
10、否则返回-1。4、利用串的基本运算,编写一个算法删除串s1中所有s2子串。提示:本题利用3题的index()函数和删除子串函数循环实现。,5、已知s=“(xyz)+*”,t=“(x+z)*y”。试利用连接、求子串和置换等操作,将 s转化为t。,实验内容及要求,实验五 数组和广义表,教学目的与要求熟练掌握数组的存储表示和实现。熟悉广义表的存储结构的特性。教学的重点与难点 数组的存储表示和常用操作的实现,实验预习检查内容,数组与一般线性表的区别?,答:数组结构固定 数据元素同构,为什么数组元素可以随机访问?,答:可以通过地址计算公式来求得任意元素的地址,实验内容及要求,3、6必做3、试设计一个算法
11、,将A0.n-1中所有奇数移到偶数之前。要求不另增加存储空间,且时间复杂度为O(n)。提示:i从左向右遍历,指向A左边的一个偶数,j从右向左遍历,指向A右边的一个奇数,然后将Ai 与Aj交换。如此循环直到i大于等于j。,6、稀疏矩阵运算器基本要求:以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。,实验内容及要求,实验六 树,教学目的与要求1.掌握二叉树,二叉树排序数的概念及存储方法。2.掌握二叉树的遍历算法。3.熟练掌握编写实现树的各种运算的算法。教学的重点与难点 二叉树的遍历操作及
12、其应用,实验预习检查内容,1、下列程序段的功能是什么?2、二叉树的遍历常用哪些方式?,答:1、建立排序树2、先序、中序、后序、层次,实验内容及要求,3、4必做3、编写程序,实现按层次遍历二叉树。4、编写程序,对二叉树进行先序遍历,并打印层号。,实验七 图,教学目的与要求1.熟悉图的各种存储方法。2.掌握遍历图的递归和非递归的算法。3.理解图的有关算法。教学的重点与难点 图的建立及图的常用操作的实现,实验预习检查内容,下列程序段的功能是什么?图的存储结构是什么?,答:1、建立图2、此程序段中,图的存储结构是邻接表,实验内容及要求,2、3必做2、编写程序,实现无向图的深度优先搜索。3、有一个邻接表
13、存储的图G,分别设计实现以下要求的算法:求出图中每个顶点的出度;计算图中出度为0的顶点数。,实验八 查找,教学目的与要求 1.掌握顺序查找,二分法查找和分块查找的算法。2.能运用线性表的查找方法解决实际问题。教学的重点与难点 顺序查找、二分查找实现及应用,实验预习检查内容,顺序查找、二分查找 的对象有什么区别?,答:顺序查找的对象可以是有序或无序表;二分查找的对象必须是有序表.,顺序查找、二分查找 的对象的存储结构分别是什么?,答:顺序查找对象可以是顺序表或链表;二分查找的对象只能是顺序表,实验内容及要求,2必做,3选做2、给出在一个递增有序表A中采用二分查找算法查找值为x的元素的递归算法,实
14、验九 排序,教学目的与要求 1.掌握各种不同排序方法的基本思想和优缺点。2.了解各种排序方法依据的原则,以便根据不同的情况选择合适的排序方法。教学的重点与难点 各种不同排序方法的实现及应用,实验预习检查内容,快速排序的基本思想是什么?,答:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。,堆排序的基本思想是什么?,答:将无序序列建成一个堆,得到关键字最小(或最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素重又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列。,实验内容及要求,2、3必做,4选做2、编写程序,采用冒泡算法对一组无序数进行递增排序。3、用选择法对一组无序数进行递增排序。4、编写程序,实现堆排序的算法。,