《数据结构与算法实验报告》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告(10页珍藏版)》请在金锄头文库上搜索。
1、数据结构实验报告数据结构实验报告题目:题目: 线性表线性表 班级:班级:网络工程网络工程 1401 班班学号:学号: 1408020106 指导教师:指导教师: 高峰高峰 日期:日期: 2016/7/6 实验一:实验一:线性表一:实验要求一:实验要求掌握数据结构中线性表的基本概念。熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度 及合并并运算在顺序存储结构撒谎能够的实验。熟练掌握链表的各种操作和应用。二实验内容二实验内容1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型) 。 2. 编程实现把顺序表中从 i 个元素开始的 k 个元素删除(数据类型为整型) 。 三:实验
2、过程及步骤三:实验过程及步骤源代码:源代码:#include #include #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct int * elem; int length; int listsize; SqList; /SqList sq; void InitList_Sq(SqList *sq) /初始化列表 sq-elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int); sq-length=0; sq-listsize=LIST_INIT_SIZE; printf(“
3、-申请空间成功-!n“); void GetElem(SqList *sq,int i)/获取第 i 位置元素的值 int *p; p= printf(“%d“,*p); printf(“n“); int ListInsert_Sq(SqList *sq,int i,int a)/在 i 位置之前插入 a int *p,*q; if(isq-length+1) printf(“-位置不合法-!n“);return 0; if(sq-length=sq-listsize) int* newbase=(int *)realloc(sq-elem,(sq-listsize+LISTINCREMENT
4、)*sizeof(int); if(!newbase) printf(“申请空间溢出n“);return 0; sq-elem=newbase; sq-listsize+=LISTINCREMENT; p=/p 指向第 i 位置的元素 q=/q 指向最后一个元素for(;q=p;-q) *(q+1)=*q; *p=a; +sq-length; return 1; int ListDelete_Sq(SqList *sq,int i) /删除 i 位置上的值 int *p,*q; if(isq-length) return 0; p=/p 指向第 i 位置的元素 q=sq-elem+sq-len
5、gth-1;/q 指向最后一个元素for(+p;plength; return 1; void visit(SqList *sq)/输出数据 int i=1; for(;ilength;i+) int *p; p= printf(“%d“,*p); printf(“ “); void main() int i=1,a=0,boo=1,number=0; SqList s,*sq; sq= InitList_Sq(sq); printf(“初始化空表n“); printf(“输入数据个数:n“);scanf(“%d“, printf(“输入%d 个数据:“,number);printf(“n“)
6、; for(;isq-length) printf(“-输出位置的数据不存在-n“); else GetElem(sq,a); 步骤:步骤: 1.初始化空表 2.顺序插入数据后输出所有元素 3.选择删除位置,删除数据后输出所有元素 4.选择查看的数据位置,输出选择查看的数据四:实验结果及分析四:实验结果及分析分析:分析:本程序在实现顺序存储插入以及删除i 个元素开始的 k 个元素删除(数据类型为 整型) 。之外在删除、查看是实时输出结果,并且可以查看希望显示数据的位置。数据结构实验报告数据结构实验报告题目:题目: 树树 班级:班级:网络工程网络工程 1401 班班学号:学号: 14080201
7、06 指导教师:指导教师: 高峰高峰 日期:日期: 2016/7/6 实验二:实验二:树一:实验要求一:实验要求掌握二叉树,二叉树排序数的概念和存储方法。掌握二叉树的遍历算法。 熟练掌握编写实现树的各种运算的算法。二实验内容二实验内容统计一棵二叉树中每种类型节点数(度为 0/1/2 的节点数) 。三:实验过程及步骤三:实验过程及步骤#include #include #include typedef struct BitNodeint data;struct BitNode *lchild,*rchild;BitNode,*BitTree; BitTree BitTreeInit()BitTr
8、ee BT;BT=(BitNode*)malloc(sizeof(BitNode);BT=NULL;return BT; BitTree BitTreeCreat(BitTree printf(“请输入节点的内容,输入 0 时结束建立!n“);scanf(“%d“,if(ch=0)BT=NULL;elseBT=(BitTree)malloc(sizeof(BitNode);BT-data=ch;BitTreeCreat(BT-lchild);BitTreeCreat(BT-rchild);return BT; void BitTreeEmpty(BitTree BT)if(BT=NULL)pr
9、intf(“树为空!n“);elseprintf(“树非空!n“); void PreOrderTraverse(BitTree BT)if(BT!=NULL)printf(“树结点的内容为:%dn“,BT-data);PreOrderTraverse(BT-lchild);PreOrderTraverse(BT-rchild); void InOrderTraverse(BitTree BT)if(BT!=NULL)InOrderTraverse(BT-lchild);printf(“树结点的内容为:%dn“,BT-data);InOrderTraverse(BT-rchild); void
10、 PostOrderTraverse(BitTree BT)if(BT!=NULL)PostOrderTraverse(BT-lchild);PostOrderTraverse(BT-lchild);printf(“树结点的内容为:%dn“,BT-data); int count(BitTree BT)if(BT=NULL)return 0;elsereturn(count(BT-lchild)+count(BT-rchild)+1); int BinTreeDepth(BitTree BT)int i=1,j=1;if(BT=NULL)return 0;elsei=BinTreeDepth(
11、BT-lchild);j=BinTreeDepth(BT-rchild);if(ij)return(i+1);elsereturn (j+1);void BinTreeClear(BitTree if(BT-rchild)BinTreeClear(BT-rchild);free(BT);BT=NULL; main()int i=1,j,l;BitTree BT;while(i!=0)printf(“-欢迎使用-n“);printf(“请选择要进行的操作n“);printf(“1.初始化一棵树 2.建立一棵树 3.判断树是否为空n“);printf(“4.按前序遍历树 5.按中序遍历树 6.按后
12、序遍历树n“);printf(“7.求树的深度 8.求树的结点数 9.把树清空n“);printf(“0.退出操作界面n“);printf(“-谢谢使用-n“);scanf(“%d“,switch(j)case 1:BT=BitTreeInit();printf(“树已经初始化!n“);break;case 2:BitTreeCreat(BT);break;case 3:BitTreeEmpty(BT);break;case 4:PreOrderTraverse(BT);break;case 5:InOrderTraverse(BT);break;case 6:PostOrderTravers
13、e(BT);break;case 7:l=BinTreeDepth(BT);printf(“树的深度为:%dn“,l);break;case 8:l=count(BT);printf(“树的结点数为:%dn“,l);break;case 9:BinTreeClear(BT);printf(“树已经清空!n“);break;case 0:exit(0); 步骤:步骤: 1.1.选择进行的操作 2.2.初始化、建立、判断树是否空、先/中/后序遍历、求深度/结点,清空树 3.3.显示结果四:实验结果及分析四:实验结果及分析分析:分析:本程序不仅可以统计一棵二叉树中每种类型节点数(度为 0/1/2 的节点数) 。 同时让他有以下功能:1.初始化一棵树。2.建立一棵树。3.判断树是否为空。4. 分别按先/中/后序遍历树。5.求树的深度。6.求树的结点数。7.清空树。