数据结构与算法实验报告文档格式.docx
《数据结构与算法实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
源代码:
#include<
stdio.h>
malloc.h>
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstruct{
int*elem;
intlength;
intlistsize;
}SqList;
//SqListsq;
voidInitList_Sq(SqList*sq)//初始化列表
{
sq->
elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
length=0;
listsize=LIST_INIT_SIZE;
printf("
---申请空间成功---!
\n"
);
}
voidGetElem(SqList*sq,inti)//获取第i位置元素的值
{
int*p;
p=&
(sq->
elem[i-1]);
%d"
*p);
intListInsert_Sq(SqList*sq,inti,inta)//在i位置之前插入a
int*p,*q;
if(i<
=0||i>
length+1)
---位置不合法---!
return0;
if(sq->
length>
=sq->
listsize)
int*newbase=(int*)realloc(sq->
elem,(sq->
listsize+LISTINCREMENT)*sizeof(int));
if(!
newbase)
申请空间溢出\n"
elem=newbase;
listsize+=LISTINCREMENT;
//p指向第i位置的元素
q=&
elem[sq->
length-1]);
//q指向最后一个元素
for(;
q>
=p;
--q)*(q+1)=*q;
*p=a;
++sq->
length;
return1;
intListDelete_Sq(SqList*sq,inti)//删除i位置上的值
1||i>
length)return0;
q=sq->
elem+sq->
length-1;
for(++p;
p<
=q;
++p)
*(p-1)=*p;
--sq->
voidvisit(SqList*sq)//输出数据
inti=1;
i<
i++)
elem[i-1];
"
voidmain()
inti=1,a=0,boo=1,number=0;
SqLists,*sq;
sq=&
s;
InitList_Sq(sq);
初始化空表\n"
输入数据个数:
scanf("
&
number);
输入%d个数据:
"
number);
=number;
a);
if(boo=ListInsert_Sq(sq,i,a))
---插入成功!
---\n"
else
---插入不成功,重新插入---!
i=i-1;
输出所有元素\n"
visit(sq);
输出删除的位置:
if(boo=ListDelete_Sq(sq,a))
---数据删除成功!
}else
---没有删除成功---\n"
输出所有元素:
输出要显示数据的位置:
输出%d位置数值\n"
a);
if(a<
0||a>
length)
---输出位置的数据不存在---\n"
GetElem(sq,a);
步骤:
1.初始化空表
2.顺序插入数据后输出所有元素
3.选择删除位置,删除数据后输出所有元素
4.选择查看的数据位置,输出选择查看的数据
四:
实验结果及分析
分析:
本程序在实现顺序存储插入以及删除i个元素开始的k个元素删除(数据类型为整型)。
之外在删除、查看是实时输出结果,并且可以查看希望显示数据的位置。
树
实验二:
树
掌握二叉树,二叉树排序数的概念和存储方法。
掌握二叉树的遍历算法。
熟练掌握编写实现树的各种运算的算法。
统计一棵二叉树中每种类型节点数(度为0/1/2的节点数)。
stdlib.h>
typedefstructBitNode{
intdata;
structBitNode*lchild,*rchild;
}BitNode,*BitTree;
BitTreeBitTreeInit(){
BitTreeBT;
BT=(BitNode*)malloc(sizeof(BitNode));
BT=NULL;
returnBT;
}
BitTreeBitTreeCreat(BitTree&
BT){
intch;
printf("
请输入节点的内容,输入0时结束建立!
scanf("
ch);
if(ch==0)
else{
BT=(BitTree)malloc(sizeof(BitNode));
BT->
data=ch;
BitTreeCreat(BT->
lchild);
rchild);
voidBitTreeEmpty(BitTreeBT){
if(BT==NULL)
树为空!
else
树非空!
voidPreOrderTraverse(BitTreeBT){
if(BT!
=NULL){
树结点的内容为:
%d\n"
BT->
data);
PreOrderTraverse(BT->
voidInOrderTraverse(BitTreeBT){
InOrderTraverse(BT->
voidPostOrderTraverse(BitTreeBT){
PostOrderTraverse(BT->
intcount(BitTreeBT){
return0;
return(count(BT->
lchild)+count(BT->
rchild)+1);
intBinTreeDepth(BitTreeBT){
inti=1,j=1;
{
i=BinTreeDepth(BT->
j=BinTreeDepth(BT->
if(i>
j)
return(i+1);
return(j+1);
voidBinTreeClear(BitTree&
if(BT){
if(BT->
lchild)
BinTreeClear(BT->
rchild)
free(BT);
main(){
inti=1,j,l;
while(i!
=0){
-----------------欢迎使用-------------------\n"
请选择要进行的操作\n"
1.初始化一棵树2.建立一棵树3.判断树是否为空\n"
4.按前序遍历树5.按中序遍历树6.按后序遍历树\n"
7.求树的深度8.求树的结点数9.把树清空\n"
0.退出操作界面\n"
-----------------谢谢使用-------------------\n"
j);
switch(j){
case1:
BT=BitTreeInit();
树已经初始化!
break;
case2:
BitTreeCreat(BT);
case3:
BitTreeEmpty(BT);
case4:
PreOrderTraverse(BT);
case5:
InOrderTraverse(BT);
case6:
PostOrderTraverse(BT);
case7:
l=BinTreeDepth(BT);
树的深度为:
l);
case8:
l=count(BT);
树的结点数为:
case9:
BinTreeClear(BT);
树已经清空!
case0:
exit(0);
1.选择进行的操作
2.初始化、建立、判断树是否空、先/中/后序遍历、求深度/结点,清空树
3.显示结果
本程序不仅可以统计一棵二叉树中每种类型节点数(度为0/1/2的节点数)。
同时让他有以下功能:
1.初始化一棵树。
2.建立一棵树。
3.判断树是否为空。
4.分别按先/中/后序遍历树。
5.求树的深度。
6.求树的结点数。
7.清空树。