太原理工大学数据结构实验报告.doc
《太原理工大学数据结构实验报告.doc》由会员分享,可在线阅读,更多相关《太原理工大学数据结构实验报告.doc(17页珍藏版)》请在三一办公上搜索。
1、线性构造一、实验目的和要求本次实习的主要目的是为了使学生熟练掌握线性表的根本操作在顺序存储构造和链式存储构造上的实现,提高分析和解决问题的能力。要求仔细阅读并理解以下例题,上机通过,并观察其结果,然后独立完成后面的实习题。二、实验容和原理习题问题描述 设顺序表A中的数据元素递增有序,试写一程序,将*插入到顺序表的适当位置上,使该表仍然有序。输入顺序表的长度,初始化顺序表数据,插入数据*。输出已建立顺序表,输出插入*后的顺序表。存储构造采用顺序存储构造算法的根本思想建立顺序表用数组的形式实现。在表中从后往前查找要插入元素的位置,直到查找到第一个比*小的数,并从表的最后一元素依次后移,把要插入元素
2、插入搜查找位置。三、主要仪器设备使用的计算机惠普:硬件配置Win7、软件环境win-TC四、操作方法与实验步骤习题源程序*includestdio.h*define MA*SIZE 100*define RIGHT 1*define ERROR 0typedef int ElemType;typedef struct ElemType elemMA*SIZE; int last;SeqList; void Initlist(SeqList *L) L-last=-1;void putseqList(SeqList *L,int n) int i; for(i=0;ielemi); L-last
3、=L-last+n; int LenList(SeqList *L) int Len; Len=L-last+1; return Len;int PositionList(SeqList *L,int *) int j; for(j=0;jlast;j+) if(*elemj) return j+1; return (L-last+1);int InsList(SeqList *L,int i,int e) int k; if(iL-last+2) printf(the position is wrong); return(ERROR); if(L-last=MA*SIZE-1) printf
4、(the list is full); return(ERROR); for(k=L-last;k=i-1;k-) L-elemk+1=L-elemk; L-elemi-1=e; L-last+; return(RIGHT);int OutputSeqList(SeqList *L) int i; for(i=0;ilast;i+) printf(%d,L-elemi); return(L-elemi);void main() int s,c; SeqList L; Initlist(&L); printf(please input the length: ); scanf(%d,&s); p
5、rintf(please input the list: ); putseqList(&L,s); LenList(&L); printf(Please input an element to insert : ); scanf(%d,&c); InsList(&L,PositionList(&L,c),c); OutputSeqList(&L); printf(n); getch();五、实验数据记录和处理六、实验结果与分析 此程序的优点是算法简单,易于实现。但是由于采用的是顺序存储的形式,导致算法的时间性能和空间性能不是很好,而且本程序的的强健性不是很好,对空间不够的情况没有很人性化的提出
6、解决方案。七、讨论、心得改良思想:*define LIST_INIT_SIZE 100typedef struct int *elem;int length;int listsize;sqlist;void creat_sqlist(sqlist *p)int i,l;p-elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int);if(!p-elem)printf(OVERFLOW);e*it(1);printf(Please input length:n);scanf(%d,&l);p-length=l;p-listsize=LIST_INIT_SIZE;pr
7、intf(Input sqlist:n);for(i=0;ilength;i+)scanf(%d,&p-elemi);for(i=0;ilength;i+)printf(%d ,p-elemi);printf(n);这是对顺序表构造的局部改良,同时可以将数据的存储改成链表的形式。心得体会:通过本次试验让我对顺序表有了更深层次的了解,同时也对顺序表和链表的区别有了自己的见解。树形构造一、实验目的和要求熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。2、 实验容和原理习题问题描述编写递归算法,计算二叉树中叶子结点的数目。输入一棵二叉树的结点假设无子
8、树,则可将其子树看作“.,输入时,按照前序序列的顺序输入该结点的容。对以以下图,其输入序列为ABD.EH.CF.I.G.。A B CD E F G H I输出二叉树中叶子结点的个数存储构造采用二叉链表存储。算法的根本思想求二叉树中叶子结点个数,即求二叉树的所有结点中左、右子树均为空的结点个数之和。可以将此问题转化为遍历问题,在遍历中“访问一个结点时判断该结点是不是叶子,假设是则将计数器累加。三、主要仪器设备使用的计算机惠普:硬件配置Win7、软件环境win-TC四、操作方法与实验步骤习题源程序*includestruct BiTreechar data; struct BiTree *lchi
9、ld; struct BiTree *rchild;struct BiTree* CreatBiTree()char *; struct BiTree* p; scanf(%c,&*); if(*!=.) p=(struct BiTree*)malloc(sizeof(struct BiTree); p-data=*; p-lchild=CreatBiTree(); p-rchild=CreatBiTree(); else p=NULL; return p;int LeafNum(struct BiTree *T) if(!T) return 0; else if(!T-lchild&!T-r
10、child) return 1; else return LeafNum(T-lchild)+LeafNum(T-rchild);int main() int num; struct BiTree* T; printf(Please input the tree(pre):n); T=CreatBiTree(); while(T=NULL) printf(empoty,again:n); T=CreatBiTree(); num=LeafNum(T); printf(nthe sum of leaf is:%dn,num); getch();五、实验数据记录和处理六、实验结果与分析 实验程序采
11、用了二叉链表作为存储构造方便了递归函数的进展。此外由于数的定义采用了递归的形式,所以关于数的构造、遍历、以及其他运算采用递归形式,使得程序的可阅读性增强。7、 讨论、心得改良思想:void CountLeaf(Bitree T, int &cout)if(T) if(!T-lchild)&(!T-rchild) count+;CountLeaf(T-lchild,count);CountLeaf(T-rchild,count); 采用C+的引用形式,可以对叶子结点的程序上进展修正,使其看起来更为简练。心得体会: 通过实验操作,了解到了数的递归定义的优点,以及对于程序算法上的思想指导。同时,也对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 数据结构 实验 报告

链接地址:https://www.31ppt.com/p-1131850.html