数据结构与算法实验报告
更新时间:2024-01-04 19:58:01 阅读量: 教育文库 文档下载
数据结构实验报告
题目: 线性表 班级:网络工程1401班 学号: 1408020106 指导教师: 高峰 日期: 2016/7/6
实验一:线性表
一:实验要求
掌握数据结构中线性表的基本概念。
熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度及合并并运算在顺序存储结构撒谎能够的实验。 熟练掌握链表的各种操作和应用。
二.实验内容
1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。
2. 编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。
三:实验过程及步骤
源代码:
#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(\申请空间成功---!\\n\}
void GetElem(SqList *sq,int i)//获取第i位置元素的值 {
int *p;
p=&(sq->elem[i-1]); printf(\printf(\}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a {
int *p,*q;
if(i<=0||i>sq->length+1) {
printf(\位置不合法---!\\n\
return 0; }
if(sq->length>=sq->listsize) {
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) {
printf(\申请空间溢出\\n\return 0; }
sq->elem=newbase;
sq->listsize+=LISTINCREMENT; }
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//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(i<1||i>sq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素 q=sq->elem+sq->length-1;//q指向最后一个元素 for(++p;p<=q;++p) {
*(p-1)=*p; }
--sq->length; return 1; }
void visit(SqList *sq)//输出数据 {
int i=1;
for(;i<=sq->length;i++) {
int *p;
p=&sq->elem[i-1]; printf(\printf(\} }
void main() {
int i=1,a=0,boo=1,number=0; SqList s,*sq; sq=&s;
InitList_Sq(sq);
printf(\初始化空表\\n\printf(\输入数据个数:\\n\scanf(\
printf(\输入%d个数据:\printf(\
for(;i<=number;i++) {
scanf(\
if(boo=ListInsert_Sq(sq,i,a)) {
printf(\插入成功!---\\n\} else {
printf(\插入不成功,重新插入---!\\n\i=i-1; } }
printf(\输出所有元素\\n\visit(sq); printf(\
printf(\输出删除的位置:\scanf(\
if(boo=ListDelete_Sq(sq,a)) {
printf(\数据删除成功!---\\n\}else {
printf(\没有删除成功---\\n\}
printf(\输出所有元素:\\n\visit(sq); printf(\
printf(\输出要显示数据的位置:\scanf(\
printf(\输出%d位置数值\\n\if(a<0||a>sq->length) {
printf(\输出位置的数据不存在---\\n\} else {
GetElem(sq,a); } }
步骤:
1.初始化空表
2.顺序插入数据后输出所有元素
3.选择删除位置,删除数据后输出所有元素 4.选择查看的数据位置,输出选择查看的数据
四:实验结果及分析
分析:
本程序在实现顺序存储插入以及删除i个元素开始的k个元素删除(数据类型为
整型)。之外在删除、查看是实时输出结果,并且可以查看希望显示数据的位置。
数据结构实验报告
题目: 树 班级:网络工程1401班 学号: 1408020106 指导教师: 高峰 日期: 2016/7/6
实验二:树
一:实验要求
掌握二叉树,二叉树排序数的概念和存储方法。
掌握二叉树的遍历算法。
熟练掌握编写实现树的各种运算的算法。
二.实验内容
统计一棵二叉树中每种类型节点数(度为0/1/2的节点数)。
三:实验过程及步骤
#include
typedef struct BitNode{ int data;
struct BitNode *lchild,*rchild; }BitNode,*BitTree; BitTree BitTreeInit(){ BitTree BT;
BT=(BitNode*)malloc(sizeof(BitNode)); BT=NULL; return BT; }
BitTree BitTreeCreat(BitTree &BT){ int ch;
printf(\请输入节点的内容,输入0时结束建立!\\n\ scanf(\ if(ch==0) BT=NULL; else{
BT=(BitTree)malloc(sizeof(BitNode)); BT->data=ch;
BitTreeCreat(BT->lchild); BitTreeCreat(BT->rchild); }
return BT; }
void BitTreeEmpty(BitTree BT){ if(BT==NULL)
printf(\树为空!\\n\
else
printf(\树非空!\\n\ }
void PreOrderTraverse(BitTree BT){ if(BT!=NULL){
printf(\树结点的内容为:%d\\n\ PreOrderTraverse(BT->lchild); PreOrderTraverse(BT->rchild); } }
void InOrderTraverse(BitTree BT){ if(BT!=NULL){
InOrderTraverse(BT->lchild);
printf(\树结点的内容为:%d\\n\ InOrderTraverse(BT->rchild); } }
void PostOrderTraverse(BitTree BT){ if(BT!=NULL){
PostOrderTraverse(BT->lchild); PostOrderTraverse(BT->lchild);
printf(\树结点的内容为:%d\\n\ } }
int count(BitTree BT){ if(BT==NULL) return 0; else
return(count(BT->lchild)+count(BT->rchild)+1); }
int BinTreeDepth(BitTree BT){ int i=1,j=1; if(BT==NULL) return 0; else {
i=BinTreeDepth(BT->lchild); j=BinTreeDepth(BT->rchild); if(i>j)
return(i+1); else
return (j+1); } }
void BinTreeClear(BitTree &BT){ if(BT){
if(BT->lchild)
BinTreeClear(BT->lchild); 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(\初始化一棵树 2.建立一棵树 3.判断树是否为空\\n\ printf(\按前序遍历树 5.按中序遍历树 6.按后序遍历树\\n\ printf(\求树的深度 8.求树的结点数 9.把树清空\\n\ printf(\退出操作界面\\n\
printf(\谢谢使用-------------------\\n\ scanf(\ switch(j){
case 1:BT=BitTreeInit();printf(\树已经初始化!\\n\ case 2:BitTreeCreat(BT);break; case 3:BitTreeEmpty(BT);break; case 4:PreOrderTraverse(BT);break; case 5:InOrderTraverse(BT);break; case 6:PostOrderTraverse(BT);break;
case 7:l=BinTreeDepth(BT);printf(\树的深度为:%d\\n\ case 8:l=count(BT);printf(\树的结点数为:%d\\n\ case 9:BinTreeClear(BT);printf(\树已经清空!\\n\ case 0:exit(0); } } }
步骤:
1.选择进行的操作
2.初始化、建立、判断树是否空、先/中/后序遍历、求深度/结点,清空树 3.显示结果
四:实验结果及分析
分析:
本程序不仅可以统计一棵二叉树中每种类型节点数(度为0/1/2的节点数)。
同时让他有以下功能:1.初始化一棵树。2.建立一棵树。3.判断树是否为空。4.分别按先/中/后序遍历树。5.求树的深度。6.求树的结点数。7.清空树。
正在阅读:
数据结构与算法实验报告01-04
镇江家族《楷人公宗诫十六条》10-08
灿烂故城风电施工方案09-18
数学第二课堂活动方案10-20
新版GMP基础知识培训资料(简版)05-21
浅析中国乡村旅游发展现状及前景10-05
新加坡小学作文06-15
非金钱激励员工的108种手段05-21
启迪小故事02-18
人教版八年级上册生物知识点归纳总结全册03-25
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 算法
- 实验
- 报告
- 单片机
- 各年级阅读书目
- 超市工作思路
- 2013年聚合物结构及性能测试试题集 2
- 顺丰快递仓储管理存在的问题及对策 - 图文
- 贵州大学2010级计算机科学与技术专业培养方案 doc - 图文
- 配套K122016年中考生物 考点总动员系列 专题07 血液(含解析)
- 2015年上半年南京大学论文申报(1) - 图文
- 原发性高血压患者护理(专业知识值得参考借鉴)
- 铅锌粉可行性研究报告 - 图文
- 2017届山西省怀仁县第一中学高三上学期期末考试数学(理)试卷(带解析)
- 2017年江苏省无锡市中考数学试卷(解析版)
- 客运专线隧道开挖作业指导书
- 江苏省扬州中学2017届高三上学期12月月考试题 数学 Word版含答案
- 物化下册练习题
- 二年级数学教案
- 浅谈保护国土资源,节约集约利用国土资源的思考
- 许昌县2012年政府工作报告
- 金融-工程与金融风险管理 - 图文
- 第八届“卡西欧”杯全国初中数学 优质课大赛 菱形的判定教学设计