实验大纲-数据结构

使用说明:每次实验都有相应的实验文件,请先下载,如数据结构-实验文件-01html

一. 入门

1. 数据结构入门

1.1 CodeBlocks的使用(或直接使用DEV C++、Visual Studio)

目标:
学会使用CodeBlocks建立项目、编写程序、掌握经常使用快捷键。
参考资料:git

CodeBlocks使用小技巧github

1.2 C++语言基础

学习目标:算法

  • C++中的cin、cout
  • typedef, #define
  • 引用参数(&)基本概念,使用引用参数的时机(函数内对引用参数修改影响到函数外, 结构体做为函数参数)
  • new与delete

难点:
多文件操做:头文件、include不懂。小程序

任务:数据结构

  1. C++版的HelloWorld
  2. 使用引用参数改写void swap1(int a, int b)->void swap(int &a, int &b)->再测试void swap(int a, int &b)
  3. 三种建立复数的方法(单文件)。见complex(复数三种传递方法参考代码).cpp
  4. 考核:三元组(多文件操做)。见TripletTest(三元组参考源代码)
  5. 其余:林丽老师的抽象数据类型做业,DS博客做业01--日期抽象数据类型设计与实现

参考资料:并发

数据结构-实验文件-01
多文件的C语言系统示例
Visual Studio 2017 安装使用教程(快速上手版)
使用Visual Studio Code开发(编译、调试)C++程序
C++指针速记函数

2. Git入门(有时间再讲)

目标:visual-studio

  • 学会使用码云网页版存储代码。
  • 进阶:学会使用命令行下的Git。

任务:
到码云注册帐号,创建本身的代码仓库并规划好目录结构(chpt01-introduction, chpt02-linearlist...)
进阶任务:学习

  1. 建立远程仓库并clone到本地。
  2. 规划好本身的目录结构,push到远程仓库。
  3. 在宿舍学会使用clone与pull。

参考资料:

Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(1)


二.线性表

1. 顺序表

目标:
熟悉顺序表的定义及其上的经常使用操做。
任务:

  • PTA-区间删除
    • 使用typedef定义List与SqList类型
    • 基本考核:CreateList、DispList
    • 删除区间元素
  • PTA-顺序表插入

参考代码:
顺序表定义

#define MaxSize 100000
using namespace std;
typedef int ElemType; 
typedef struct 
{   
    ElemType data[MaxSize];     //存放顺序表元素
    int length ;            //存放顺序表的长度
} List;
typedef List *SqList;

2. 链表

目标:

  • 熟悉链表的定义及其上的经常使用操做
    任务:
  • 手动建立链表(基础中的基础,重点掌握)
    • 建立头结点(LinkList head),而后建立3个节点(LNode* n1,n2,n3),而后将这些节点连成一个链表(head->n1->n2->n3)
    • 编写void DispLinkList(LinkList linklist),使用while遍历输出刚才手动建立的链表。
  • PTA-头插法、尾插法建立链表
    • 定义输出链表函数、定义建立链表函数。PTA考核。
    • 尾插法:定义q指针变量,指向上一次插入的节点。PTA考核。
    • 销毁链表(看懂)
  • PTA-单链表逆置
  • PTA-有序链表插入删除

难点:
部分学生对于指针变量指向某个节点没有直观认识。不能将移动指针操做转化为代码,也不能从代码看出其对应的指针移动、指向操做。

参考资料:
单链表定义

typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
} LNode, *LinkList;

3. 栈和队列

目标:

  • 掌握栈和队列的基本存储结构
  • 熟练掌握栈和队列的基本使用
  • 熟悉栈和队列的一些典型应用

    任务

  1. 使用顺序存储结构来实现栈的基本操做。
  2. 学会使用STL中的stack、queue与string见参考资料Stack与Queue代码。完成实验任务书中的题目1—C++中的stack和queue(考核)。
  3. PTA:字符串是否对称(考核)、符号配对(考核)、表达式转换-中缀转后缀(考核)
  4. 可选:使用stack实现数制转换
  5. 递归
    5.1 递归程序编写(自行完成,实验课考核加分)
    题目:已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算法:
    ① 求链表中的最大整数;
    ② 求链表的结点个数;
    ③ 求链表中全部节点数据的平均值。
    5.2 使用stack将如下递归程序转化为非递归程序

    void test(int &sum)
    { 
        int x; 
        cin>>x; 
        if (x==0) sum = 0;  
        else {
            test(sum);
            sum+=x;
         } 
         cout<<sum; 
    }
  6. 队列相关应用:尝试完成银行业务队列简单模拟(PTA)、舞伴问题(PTA)、使用队列打印杨辉三角(可选)。
  7. OJ上的题目(可选):使用队列对扑克牌排序、走迷宫、括号匹配
  8. 特别加分:使用递归或者队列实现对指定目录名及文件名进行文件查找(可以使用C、C++、Python、Java实现)。并发一个简单博客描述该问题解决过程。

参考资料:

Stack与Queue代码
Python3不彻底入门指南
Python文件系统功能

4.字符串

完成试验任务书中第一题-拼接字符串(身份证),最后一题(判断是不是数字)。而后完成其余OJ上的字符串题目。


三.树

目标:
学会建立树,熟练掌握树的递归结构及在其上的递归算法,二叉树的基本操做,哈夫曼树,树的应用。

任务:

  1. 建立树,前中后序遍历。PTA:二叉树操做集。
  2. 树的递归结构。PTA:求二叉树高度、先序输出叶结点。
  3. 树的应用。PTA:表达式树。
  4. 先序、中序、后序肯定树。PTA:还原二叉树、根据后序和中序遍历输出先序遍历。
  5. 队列应用。PTA:二叉树层次遍历。
  6. 哈夫曼树。PTA:二叉树叶子结点带权路径长度和、修理牧场。
  7. 并查集:朋友圈、家谱处理。

四.查找与排序

目标:
学会基本的查找与排序算法,学会将哈希表应用于快速查找、统计等。
任务:

  1. 查找算法:基本查找、二分查找、二叉排序树、哈希(map的使用)
  2. 排序算法:基本排序、快排、堆排。
  3. 查找排序的综合应用:STL中set、map的综合应用、前k大,倒排索引等。

拓展资料1:倒排索引
倒排索引原理和实现

拓展资料2:STL中set容器的用法
STL Map演示小程序
STL中的set使用方法详细!
STL之Set:Set的基本用法
C++使用: C++中map的基本操做和用法


五.图

基本目标:

  1. 学会建立并使用图的两种存储方式:邻接矩阵、邻接表。学会在这两种存储结构上图的基本操做(求点的入度、出度、找到某个点的邻接点等)。
  2. 掌握图的DFS与BFS代码实现。
  3. 掌握拓扑排序的代码实现。
  4. 掌握最短路径的代码实现。

任务:

  1. 邻接矩阵的建立。PTA:邻接矩阵实现图的操做集(函数)。
  2. 邻接表的建立。PTA:图邻接表操做(函数)。
  3. DFS、BFS算法。PTA:图着色问题(DFS、BFS)、六度空间(BFS应用),公路村村通、修建道路。
  4. 使用栈完成拓扑排序。PTA:拓扑排序(函数)。
  5. 最短路径。PTA:修建道路。

注意: 本章上手难,能够适当引导如何建立邻接矩阵与邻接表。能够用试验任务书的例子按部就班,逐步建立一个图。

相关文章
相关标签/搜索