1、数据结构实验报告数 据 结 构实 验 报 告 专 业 惠普测试 班 级 142班 姓 名 张建一 学 号 1408090219 学 期 2015-2016学年第一学期 指导老师 刘勇 实验1234总分成绩成绩:教师评语: 数据结构 上机实验报告学号: 1408090219 姓名: 张建一 所在系: 信息学院 班级: 惠普测试142 实验名称: 线性结构基本算法的实现 实验日期 实验指导教师 刘勇 实验机房 弘毅楼D410 -1. 实验目的:(1) 掌握线性表顺序存储结构的基本操作:插入、删除、查找;(2) 掌握线性表链式结构的基本操作:插入、删除、合并等运算;(3)掌握栈和队列基本运算的算法;
2、(4)掌握稀疏矩阵的压缩存储的算法。2. 实验内容:(1)实现顺序表的创建、插入、删除和查找的操作;(2)实现单链表 插入、删除、合并的操作;(3)实现2个有序线性表的合并;(4)利用顺序栈实现括号匹配的算法;(5)实现顺序队列各种基本运算的算法;(6)实现链栈各种基本运算的算法;(选做)(7)实现链队列各种基本运算的算法;(选做)(8)实现稀疏矩阵压缩存储的算法。3算法设计(编程思路或流程图或源代码) 内容:1、 顺序表的插入和删除2、 有序单链表的合并3、 数制转换的算法实现1#include#include#define LIST_INIT_SIZE 100 #define LISTIN
3、CREMENT 10#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int ElemType;typedef int Status;typedef struct ElemType *elem; int length; int listsize;SqList;Status InitList_Sq(SqList *L) L-elem =(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); i
4、f(!L-elem) return OVERFLOW; L-length=0; L-listsize=LIST_INIT_SIZE; return OK;Status CreatList_Sq(SqList *L,int n) int i; L-length=n; for(i=0;ielemi); return OK;void TraverList_Sq(SqList *L) int i; printf(顺序表的长度为:%dn,L-length); printf(顺序表中的元素依次为:); for(i=0;ilength;i+) printf(%5d,L-elemi); printf(n);
5、int ListInsert_Sq(SqList *L,int i,int e) int *newbase,*q,*p; if(iL-length+1) printf(由于插入位置不合法导致插入操作失败n); return ERROR; else if(L-length=L-listsize) newbase=(int *)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(int); if(!newbase)return OVERFLOW; L-elem=newbase; L-length=+LISTINCREMENT; q=&(L-elemi-
6、1); for(p=&L-elemL-length;p=q;p-) *(p+1)=*p; *q=e; +L-length; return OK; int DeleteList_Sq(SqList *L,int i,int e) int x,*q,*p; if(iL-length) printf(由于删除位置不合法无法进行删除n); return ERROR; else if(L-length=0) printf(由于是空表无法删除n); return OVERFLOW; else q=&(L-elemi-1); e=L-elemi-1; printf(第%d个元素%d已删除n,i,e); fo
7、r(p=&(L-elemL-length-1);qlength; return OK; int main() SqList a,*l=&a; int select,n,i,x,m,b; do printf(n第一次使用初始化n); printf(1 初始化n); printf(2 顺序表的创建n); printf(3 顺序表的插入n); printf(4 顺序表的删除n); printf(5 顺序表的遍历n); printf(0 退出nn); printf(请选择操作 1-5: ); scanf(%d,&select); switch(select) case 1: if(!InitList_
8、Sq(l) printf(顺序表初始化失败n); InitList_Sq(l); printf(顺序表已经初始化n); break; case 2: printf(请输入要创建的顺序表的长度:); scanf(%d,&n); CreatList_Sq(l,n); TraverList_Sq(l); break; case 3: printf(请输入要插入的位置:); scanf(%d,&i); printf(请输入要插入的元素:); scanf(%d,&x); ListInsert_Sq(l,i,x); TraverList_Sq(l); break; case 4: printf(请输入要删
9、除的位置:); scanf(%d,&m); DeleteList_Sq(l,m,b); TraverList_Sq(l); break; case 5: TraverList_Sq(l); break; while(select=1); return 0;2#include#includetypedef struct node int data; struct node *next;node,*list;void init(list &head) head = (list)malloc(sizeof(node); head-next = NULL;void input(list &h) lis
10、t p,q; q = h; printf(输入数据的个数:); int n; scanf(%d,&n); printf(请输入%d个有序递增的数据,n); for(int i=0; idata); p-next = q-next; q-next = p; q = p; void output(list h) list p; p = h-next; printf(输出数据n); while(p!=NULL) printf(%d ,p-data); p = p-next; void combine(list &a,list &b,list &c) list p,q,t; p = a-next; q
11、 = b-next; free(b); b = q; c = a; a = p; c-next = NULL; while(p&q) if(p-data data) a = a-next; p-next = c-next; c-next = p; p = a; else b = q-next; q-next = c-next; c-next = q; q = b; if(p!=NULL) while(p) a = a-next; p-next = c-next; c-next = p; p = a; if(q!=NULL) while(q) b = q-next; q-next = c-nex
12、t; c-next = q; q = b; int main() list a,b,c; init(a);init(b); printf(输入链表A:n); input(a); printf(输入链表B:b); input(b); combine(a,b,c); output(c); return 0;3#include void fun(int x,int k);int main() int n; printf(你要测试几组数据? ); scanf(%d, &n); printf(请输入%d组数据(输入格式:a b):n,n); int i,k,x; for(i = 0;i 0); for(
13、-c;c=0;-c) if(zuc !=-1&zuc 9) printf(%c,zuc+(A-10); else printf(%d,zuc); 4.程序调试(实验数据记录根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)1235.讨论(通过实验的一些体会、学会的知识和技能等)1、线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素2、线性链表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素 数据结构 上机实验报告学号: 1408090219 姓名: 张建一 所在系: 信
14、息学院 班级: 惠普测试142 实验名称: 二叉树的基本应用 实验日期 实验指导教师 刘勇 实验机房 D410 -2. 实验目的:(1) 理解树这种数据结构。(2)掌握二叉树二叉链表这种存储结构。(3)完成二叉树各种基本运算的算法。2. 实验内容:(1)实现二叉树创建的算法。(2)实现二叉树各种遍历算法。(3)实现二叉树其他操作的算法,包括:统计叶子结点的个数、求二叉树的深度、线索二叉树等。3算法设计(编程思路或流程图) 1、 二叉树创建的算法2、 叶子结点统计的算法3、 二叉树深度统计算法 1#include#include#include#define MAX 20#define OK 1
15、#define ERROR 0#define OVERFLOW 0typedef char TElemType;typedef int Status;typedef struct BiTNode TElemType data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;BiTree CreateBiTree(BiTree T) char ch; scanf(%c,&ch); if(ch=#) T=NULL; else T = (BiTNode*)malloc(sizeof(BiTNode); if(!T) exit(OVERFLOW); T-
16、data = ch; T-lchild = CreateBiTree(T-lchild); T-rchild = CreateBiTree(T-rchild); return T;void LevelOrder(BiTree T) BiTree QueueMAX,b; int front,rear; front = rear = 0; if(T) Queuerear+ = T; while(front!=rear) b = Queuefront+; printf(%2c,b-data); if(b-lchild !=NULL) Queuerear+ = b-lchild; if(b-rchil
17、d !=NULL) Queuerear+ = b-rchild; 主函数#include BiTNode.hint main() BiTree T = NULL; printf(*采用递归函数构造一棵二叉树*n); printf(请读入构造二叉树的字符序列:); if(T=CreateBiTree(T) printf(二叉树建立成功!并以层序遍历输出构造的二叉树n); LevelOrder(T); printf(n); else printf(很遗憾,不能成功建立二叉树!n); return 0;2#include#include BiTNode.hint leafcount(BiTree b
18、t) int n; if(bt =NULL) return 0; else if(bt-lchild=NULL) & (bt-rchild=NULL) n = 1; else n = leafcount(bt-lchild) + leafcount(bt-rchild); return n;int main() BiTree T = NULL; int m; printf(*构造一颗二叉树并统计叶子结点的数*n); printf(请输入二叉树的序列:); T = CreateBiTree(T); if(T) printf(二叉树建立成功!以层序遍历输出构造的二叉树n); LevelOrder(
19、T); m = leafcount(T); printf(n该二叉树的叶子结点数目是: %dn,m); else printf(二叉树建立不成功!n); return 0;3#include#include BiTNode.hint depth(BiTree bt);int main() BiTree T = NULL; printf(*构造一颗二叉树并统计深度*n); printf(请输入二叉树的序列:); T = CreateBiTree(T); if(T) printf(二叉树建立成功!以层序遍历输出构造的二叉树n); LevelOrder(T); int m = depth(T); p
20、rintf(n该二叉树的深度是: %dn,m); else printf(二叉树建立不成功!n); return 0; int depth(BiTree bt) if(bt =NULL) return 0; else int dm = depth(bt-lchild); int dn = depth(bt-rchild); return dm dn ? dm+1 : dn+1; 4程序调试(实验数据记录根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)1235讨论(通过实验的一些体会、学会的知识和技能等
21、)1、树形结构是一类重要的非线性数据结构。二叉树的特点是每个结点至多只有两棵子树,并且二叉树的子树有左右之分次序不能任意颠倒2、二叉树的性质:(1)在二叉树的第i层上至多有2i-1个结点(i=1)(2)深度为K的二叉树至多有2k -1个结点(k=1)(3)对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2则n0=n2+1(4)具有n个结点的完全二叉树的深度为log2 n +1 数据结构 上机实验报告学号: 1408090219 姓名: 张建一 所在系: 信息学院 班级: 惠普测试142 实验名称: 图的基本实现与应用 实验日期 实验指导教师 刘勇 实验机房 D410 -3. 实验
22、目的:(1) 理解图这种数据结构。(2) 掌握邻接矩阵、邻接表这种存储结构的实现方法。(3) 完成图的遍历的算法。2. 实验内容:(1)实现图的邻接矩阵与邻接表结构的转换。(必做)(2)实现图遍历的算法。(必做)(3)实现图的拓扑排序的算法。(4)实现图的最短路径的算法3算法设计(编程思路或流程图)1、 图的邻接矩阵和邻接表创建的算法2、 图的两种遍历算法1#define VERTEXTYPE int#define ADJTYPE int#define MAXLEN 40#include#includetypedef struct VERTEXTYPE vexsMAXLEN; ADJTYPE
23、arcsMAXLENMAXLEN; int vexnum,arcnum; int kind;MGRAGH;typedef struct node3 int adjvex; struct node3 *next;EDGENODE;typedef struct VERTEXTYPE vertex; EDGENODE *link; int id;VERTEXNODE;typedef struct VERTEXNODE adjlistMAXLEN; int vexnum,arcnum; int kind;ADJGRAGH;MGRAGH create_MGRAGH() int i,j,k; MGRAGH mg; mg.kind = 2; printf(nninput vertexnum and arcnum(,):); scanf(%d,%d,&i,&j); fflush(stdin); mg.vexnum = i; mg.arcnum = j; printf(nn); for (i=0; img.vexnum; i+) printf(input the value of vertex %d:,i+1); scanf(%d,&mg.vexsi); fflush(stdin); for(i=0; img.vexnum;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2