前言  数据结构实验的目的和要求
《数据结构》是计算机相关专业的一门核心基础课程,也是很多高校研究生入学考试专业课必考课程之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。这门课程的主要任务是培养学生的算法分析、设计能力及良好的程序设计习惯。通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。学习这门课程,习题和实验是两个关键环节。学生理解算法的最佳途径是上机实验。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写该实验指导书。
一、实验目的、要求和任务
计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习编写计算机程序仅仅了解计算机语言是不够的,还必须掌握数据组织、存储和运算的一般方法,这是数据结构课程中学习和研究的内容。由于数据结构的原理和算法较抽象,而该课程一般在本科低年级开设,对于计算机程序设计知识的初学者,理解和掌握其中的原理就显得较为困难。
1、 熟练掌握C语言的编辑、编译、调试程序。
2、 会书写类C语言的算法,并将算法转变为程序实现。
3、 正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现。
4、 有较强的逻辑分析能力。
5、 针对问题的不同选择合适的数据结构,提高算法设计的能力和动手实验的技能。
6、 学会分析研究计算机加工的数据结构的特性,以便为应用设计的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。
7、 本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚、正确易读,符合软件过程的规范,从而培养学生的数据抽象能力。
8、 通过若干数据结构应用实例,引导学生学习数据类型的使用,为今后学习面向对象的程序做一些铺垫。
二、实验基本内容及学时分配
为了达到实验目的,本课程安排了8个实验单元,训练的重点在于基本的数据结构,而不是强调面面俱到。各实验单元与教科书的各章只具有粗略的对应关系,一个实验题常常涉及到几部分教学内容。总学时:16学时。
1、线性表(2学时)
(1) 熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;
(2) 以线性表的各种操作(建立、插入、删除等)的实现为重点;
(3) 通过本次实验帮助学生提高C语言的编程能力(特别是函数参数、指针类型、链表的使用)。
  2、栈和队列及其应用(2学时)
(1) 掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们;
(2) 训练的要求是掌握“栈”的基本特点及其典型用法;问题求解的状态表示及其递归算法;
由递归程序到非递归程序的转化方法。
3、树及其应用(2学时)
(1) 树是一种非线性数据结构,广义表的实质是树结构,而稀疏矩阵的十字链表存储结构也是图的一种存储结构,故本单元是本课的实习重点;
(2) 要求学生熟悉各种存储结构的特性,以及如何应用树结构求解具体问题;
(3) 训练的要点是:递归算法的设计方法;表达式的求值技术;哈夫曼方法及其编译码技术;完整的应用系统的用户界面设计和操作定义方法;矩阵乘法的特殊操作顺序;路径遍历(树、图的遍历)技术。
4、排序(2学时)
    本次实验旨在集中对几个专门的问题做较为深入的探讨和理解。
    散列技术与实际问题关系密切,哈希函数的选择和冲突解决方法的选用都带有较强的技巧性和经验性;学生在实习中体会这一有效技术在查和内部排序实习中,理解开发高效率算
法的可能性和寻、构造高效算法的方法。
三、说明
1、 该课程采用理论与实践相结合的教学方法,集知识性与趣味性于一体,达到良好的教学效果。
2、 硬件要求:在多媒体教室讲解及演示。为保证教学顺利进行,要求实验室提供PII及以上的微机。
3、 学生每次上机实验都必须遵守实验室的有关规定。
四、实验报告规范
实验报告的内容包括:
1、实验目的:说明实验所验证的知识点。
2、需求分析:以无歧义的陈述说明程序设计的任务、约束条件、输入输出要求、对功能的规定及模型。
3、逻辑设计:说明本程序中用到的所有抽象的数据类型的定义、主程序的流程以及各程序模块之间的层次调用关系。
4、详细设计:逻辑设计中定义的所有数据类型的实现,核心算法的设计描述、人机界面设计、函数之间调用关系的描述,主要功能的算法框架,测试数据设计。
5、测试分析:测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
6、心得:软件设计与实现过程中的经验与体会,进一步改进的设想。
7、程序清单:源程序中应有足够的注释。如果提交源程序软盘,列出程序文件名。
五、如何提高上机效率
为了提高上机的效率,真正达到实验目的,要求同学做好实验前的准备工作,写好实验预习报告,即实验报告规范中的1)、2)、3)、4)部分,编写好程序,并用一组测试数据手工执行程序静态检查程序是否有错,通过阅读、执行程序或给别人讲解自己的程序而深入全面地理解程序逻辑,提高程序的正确性。C语言程序不熟悉的同学,上机时最好带上C语言
程序设计的教材,以备查阅。调试中遇到问题,应认真分析,确定可疑点,设置调试断点或输出断点处变量的值,以便发现问题,迅速排除问题,加快调试速度。
实验一  线性表及其应用
——顺序表
在众多数据结构当中,线性表是最简单、也是最基本的一个。线性表按存储结构分,可分为顺序表和链表,它们各有特。本实验的主要目的在于帮助同学熟练掌握线性表的基本操作在顺序存储结构上的实现,顺序表的优点是可以实现随机存取,用数组对其进行定义,主要操作时针对数组下标的运算。本实验相对比较简单,通过本实验,对顺序表基本操作及其组合应用的演练,加深对线性表顺序存储方法及其基本操作的理解,为以后进一步学习更复杂的数据结构打下基础。
一、实验目的
    1.掌握顺序存储结构的特点。c语言算法书籍
    2.掌握顺序存储结构的常见算法。
二、实验要求
    1.输入一组整型元素序列,建立顺序表。
    2.实现该顺序表的遍历。
    3.在该顺序表中进行顺序查某一元素,按位置查和按元素查。
4.在该顺序表中间位置插入某一元素,并输出。
5. 在该顺序表中间删除某一元素。
6.编写一个主函数,调试上述算法。
三、实验内容
1、分析、理解下述程序,比较与理论教材中的异同。
      存储定义
        #define MAXSIZE 100  //表中元素的最大个数
        typedef int  ElemType;//元素类型
        typedef struct list
{
          ElemType *elem;//静态线性表,也可以用数组注意实现方法的改变
          int listsize;  //当前分配的存储容量
int length;  //表的实际长度
        }SqList;//顺序表的类型名
构造顺序表算法
void initlist_sq(SqList *L)
{
        L->elem=( ElemType *)malloc(MAXSIZE*sizeof(ElemType));
        if(!L->elem) exit(0);
        L->length=0;
        L->listsize=MAXSIZE;
}
主程序参考
int main(void)
{
  Sqlist L1;
  ElemType temp;
  char cmd;
  int i=0;
  initlist_sq(&L1);
  printf("X=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARCH\n");
  while(1)
  {
        cmd=getchar();
        switch(cmd)
        {
              case 'C':
              case 'c':
                creat_sq(&L1);
                printf("X=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARCH\n");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。