算法与数据结构课程设计实践报告。
年级:1003 姓名:王玉川学号:11030106140003 专业:经济管理层次:专升本。
一、线性表。
一)建立一个单链表,显示链表中每个节点的数据,并做删除和插入处理。
1、 功能。
1) 建立以带头结点的单链表。
2) 显示链表中每个结点的数据。
3) 在单链表中指定位置插入指定数据并输出单链表中所有数据。
4) 删除单链表中指定的结点并输出单链表中所有数据。
2、 输入要求。
输入单链表中所有数据,插入的数据元素的位置、值,要删除的数据元素的位置。
3、 测试数据。
单链表中所有数据:12,23,56,21,8,10,15,67,90,32
插入的数据元素的位置、值:1,28
要删除的数据元素的位置:10
概要设计】算法思想:由于在操作过程中要进行插入、删除操作,为运算方便,选用单带头结点的单链表作数据元素的存储结构。对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数据值,指针域指向下一个结点。
1) 数据结构。
单链表结点类型:
typedef struct node
{ int data;
struct node *next;
listnode;
带头结点的单链表类型定义:
typedef listnode *linklist;
2) 模块划分:
建立点头结点的单链表creatlinklist;
显示链表中每个结点的数据printlist;
在单链表中指定位置插入指定数据并输出单链表中所有数据insertlist;
删除单链表中指定的结点并输出单链表中所有数据deletelist;
主函数mian(),功能是给出测试数据值,建立测试数据值的带头结点的单链表,调用printlist函数、insertlist函数、deletelist函数实现问题要求。
详细设计] 见程序。
二)约瑟夫环(joseph)问题的一种描述是:编号1,2,┉,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),一开始,任选一个正整数作为报数上线值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。
设设计一个程序求出出列顺序。
二、数组、栈和队列。
3、用n×n矩阵m表示一个迷宫,0和1分别表示通路和墙壁。迷宫的入口地点下标为(1,1),出口点下标为(n,n)。试求出从入口点到达出口点的一条通路。
基本要求]利用二维数组存储迷宫,采用递归算法实现。
测试数据]自己设计一个8≤n≤20的数据,并把测试迷宫打印出来,程序能够求出一条这样的通路。
4、停车场管理。设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场。每辆停放在车场的车在它不离开停车场时必须按它停留的时间长短交费。试为停车场编制按上述要求进行管理的模拟程序。
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离开”信息,汽车牌照号码以及到达或离去的时刻。
与每一组输入数据信息相对应的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。
(提示:需另设一个栈,临时停放为给要离去的汽车让路从停车场退出来的汽车,也用顺序存储结构实现。)
测试数据]设n=2,输入数据为其中:‘a表示到达,‘d表示离去,‘e表示输入结束。
其中表示1号牌照车在5这个时刻到达,而表示1号牌照车在15这个时刻离去。
三、二叉树5、请使用数组输入二叉树的结点数据,按照提示以链表结构创建二叉树,完成后将链表内容输出。
提示:创建二叉树结点数据的策略有三个。
1. 将第一个要创建的元素插入成为根节点。
2. 将元素值与结点值比较,如果元素值大于结点值,将此元素送往结点的右儿子结点,如果右儿子结点不是空的,需要重复比较,否则创建结点将元素值插入。
3. 如果元素值小于结点值,将此元素送往结点的左儿子结点,如果左儿子结点不是空的,需要重复比较,否则创建结点将此元素值插入。
例如:二叉树结点值输入的数据顺序是5,6,4,8,2,3,7,1,9。按照上述策略创建的二叉树,下图:
tc3常用快捷键使用。
f1:帮助。
f2:保存。
f3:新建。
f4:运行到光标处。
f5:watch窗口。
f6:窗口切换。
f7:进入函数体运行。
f8:单步调试。
f9:编译(自动生成*.obj和*.exe文件)
ctrl+f9:运行刚编译链接的*.obj文件。
ctrl+f2:取消运行。
atl+f5:用户屏幕切换。
ctrl+y:删除当前**行。
ctrl+n:插入一个新行。
alt+ 菜单上面的红色字母:打开相应菜单。
insert键:添加监视变量。
数据结构与算法
本章知识要点 算法的基本概念 数据结构的定义 线性表的定义和存储 树 二叉树的定义和存储 查找与排序算法。算法 algorithm 是一组有穷的规则,规定了解决某一特定类型问题的一系列运算,是对解题方 与完整的描述。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中...
算法与数据结构
学院专业姓名学号。实验1 线性表的操作 12学时 问题描述 假设一个班级内有n个学生,定义一个学生类和一个班级类。学生类中包括学号 姓名 性别 年龄 专业等属性 班级类包括一个学生对象链表。定义如下 class student class myclass student stu head 链表表头指...
算法与数据结构
1 简述算法的概念及其五个重要特性。2 下图是用邻接表存储的图,请画出此图,写出其邻接矩阵以及从c点开始分别按广度优先搜索和深度优先搜索遍历该图的结果。给定一棵用二叉链表表示的二叉树,其根指针为root,编写求此二叉树叶结点个数的算法,要求先写出二叉链表的类型定义。2.编写简单选择排序的算法。1 用...