合肥学院 计算机科学与技术系 课程设计报告 2 0 0 9 ~2 0 1 0 学年第二学期 课程 数据结构与算法 课程设 计 名 称 广义表的运算 学生姓名 陈发银 学号 0 8 0 4 0 1 2 0 2 8 专业班级 0 8 计本(2 )班 指导教师 王昆仑 2 0 1 0 年 6 月 1 题目: 广义表的运算。本设计要求实现广义表的建立、查找、输出、取表尾、以及求深度、求逆表等。 一、问题分析与任务定义: 此程序需要完成以下几个任务:首先要将输入的用数组存储的广义表转化成以广义表的存储结构存储的广义表,这个过程也就是生成广义表;查找广义表,查找广义表要返回一个值 flag,当 flag=1时,程序查找到待查的元素,当 flag=0时,程序没有找到待查元素;输出广义表,遍历广义表,输出广义表的遍历结果;取表头,返回表头结点;取表尾,将广义表从第二个元素开始复制到另一个广义表中;求广义表的深度,遍历每一层广义表,将广义表内每层广义表深度最大的广义表相加为同一层所求过的子表中深度的最大值,最后返回值加一即为广义表的深度;求逆表,将广义表逆向输出。 实现本程序需要解决以下问题: 1、 如何根据广义表的特点建立广义表。 2、 用什么方法才能查找到广义表中每一个元素,如何标志是否找到待查元素。 3、 建立广义表,如何根据广义表的存储结构的特点建立广义表。 4、 求广义表的深度的依据是什么。 5、 运用什么方法才能将广义表逆序。 6、 如何实现广义表的遍历。 二、概要设计和数据结构选择: 1、设计思想:广义表是线性表的一种推广,但它并不是线性表。课本上在介绍广义表的计本概念的基础上,介绍了广义表的存储及应用。广义表浓缩了线性表、数组等常见的数据结构的特点,在有效利用存储空间方面更胜一筹,目前在文本处理、人工智能、代数操作和计算机图形方面等各个领域都具有应用价值。 所以在我当时拿到这个题目的时候,虽然它只有短短的几行字,但是我深深的感觉到了它的难度,在后来课程设计中,也证实了我的感觉,每个功能都实在是太难实现了,所以只有各个击破了。设计程序时,先起草了流程图,通过流程图来看,就使得程序鲜明易懂,接下来先写好了主函数,通过主函数的调用,实现题目要求的各个功能,使得程序模块化,便于编写,即使不会写的子函数,也可以先空着,等待以后想到好的方法后再对其进行操作,同时在程序界面上也做了美化,使人感觉舒畅,另外通过一个循环,能让用户...