1、苏州科技学院数据结构(C 语言版)实验报告专业班级 地信 0912 学 号 姓 名 实习地点 C1 机房 指导教师 实验一 线性表一、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)线性表是最常用且最简单的一种数据结构。简言之,一个线性表是 n 个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数或者一个符号,也可以是一页书,甚至其他更复杂的信息。线性表是一个相当灵活的数据结构,它的长度可根据需要增长或者缩短,即对线性表的数据元素不仅访问,还可以进行插入和删除等。二、源程序及注释(打包上传):三、运行输出结果:1
2、、建立线性表2、插入元素3、删除元素4、查找元素四、调试和运行程序过程中产生的问题及采取的措施:问题:在调试过程中只要碰到了程序检查无误,却不能运行?解决:经过多次反复的检查和修改,发现是指针出了问题,最终正常运行了程序。五、对算法的程序的讨论、分析,改进设想,其它经验教训:分析,改进设想:整个算法在运行复杂程度上还有许多需要改进,可以通过查阅资料度分段功能程序进行简化。经验教训:上课听老师在上面说的时候自己听的懂,感觉很简单,也不记笔记,然后上机自己去做程序的时候发现自己不知道该怎么动手。发现自己还是没有完全了解这个程序,以后要勤动手,不做语言的巨人。实验二 栈和队列一、程序设计的基本思想,
3、原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)栈的定义和特点定义:限定仅在表尾进行插入或删除操作的线性表,表尾栈顶,表头栈底,不含元素的空表称空栈特点:先进后出(FILO)或后进先出( LIFO)队列的定义及特点定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。队尾(rear)允许插入的一端队头(front)允许删除的一端队列特点:先进先出(FIFO)循环队列入队操作:算法说明:删除队头元素,返回其值 x 并修改队头指针 分 析: (1) 在删除前应当判断队列是否空?if (q-front = q-rear ) return false;(2)删
4、除动作分析;前面约定指针 front 指向队首元素的位置,故:x=q-data q-front ; q-front = (q-front+1)%Maxsize二、源程序及注释(打包上传):三、运行输出结果:1、建立栈:构造一个空栈,并插入元素2、入栈,插入元素3、出栈,删除元素4、取栈顶元素5、输出显示栈内元素,从栈底到栈顶四、调试和运行程序过程中产生的问题及采取的措施:问题:队列队尾指针已经移到了最后,再有元素入队就会出现溢出,而事实上此时队中并未真的“满员”。解决:队列的数据区 data0.MAXSIZE-1看成头尾相接的循环结构,头尾指针的关系不变,将其称为“循环队” 。五、对算法的程序
5、的讨论、分析,改进设想,其它经验教训:讨论、分析,改进设想:栈和队列是两种常见的数据结构,它们都是运算受限的线性表。经验教训: 栈的输入和删除都在栈顶进行,它是后进先出线性表。队列的插入在队尾,而删除在队头,它是先进先出的线性表。当解决具有先进先出(或后进先出)特性的实际问题时,可以使用队列(或栈)这种数据结构来解决。实验三 树和二叉树 一、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)结点的度:结点具有的子树数称为该结点的度(Degree)。叶子结点:度为 0 的结点,即没有子树的结点。分支结点:度大于零的结点。内部结点:除根结点外的分支结点。
6、树的度:一棵树中各个结点度数的最大值。二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。算法基本思想:首先读入当前根结点数据,如果是 ,则表示当前树根置为空,否则申请一个新结点,存入当前根结点的数据,分别用当前根结点的左子域和右子域进行递归调用,创建左、右子树。BiTree CreateBiTree() char ch; BiTreeNode *p;ch=getchar();if (ch=#) return NULL;else p=(BiTreeNode *) malloc(sizeof(BiTreeNode);p-data=ch;p-LChild=CreateBiTree();p-RChild=CreateBiTree();return (p);二、源程序及注释(打包上传):三、运行输出结果:1、建立二叉树,插入节点2、先序遍历二叉树3、中序遍历二叉树4、后序遍历二叉树5、二叉树的结点总数