ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:52.08KB ,
资源ID:4893219      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4893219.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机软件技术基础实验手册.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机软件技术基础实验手册.docx

1、计算机软件技术基础实验手册计算机软件技术基础实验教学大纲 一、基本信息课程编码020213050课程学时56课程类别技术基础课实验总学时4开出学期第六学期开出单位信息学院计算机系适用专业自动化、电子信息工程、通信工程二、实验安排序号实 验 项 目实验学时每组人数实验类型开出要求1线性表的建立与遍历21验证性必做二叉树的建立与遍历21验证性必做三、实验目的、内容与要求实验一 线性表的建立与遍历(一) 实验目的进一步理解线性表的逻辑结构和存储结构,掌握线性表的建立与遍历算法。(二) 实验内容1、给定一个输入序列,建立顺序表,访问输出顺序表中各结点的内容。2、给定一个输入序列,建立线性链表,访问输出

2、线性链表中各结点的内容。(三) 实验要求1、掌握线性表的建立与遍历算法的实现;2、根据实验内容,用C语言编程实现,上机调试运行得出实验结果;3、写出预习报告和实验报告。实验二 二叉树的建立与遍历(一) 实验目的进一步理解二叉树的逻辑结构和存储结构,掌握二叉树的建立与遍历算法。(二) 实验内容1、 用二叉链表创建二叉树输入根结点值;若左子树不空,则输入左子树,否则输入一个结束符;若右子树不空,则输入右子树,否则输入一个结束符。例如:FCADBEGHP 其中表示结束符2、遍历该二叉树(1) 前序遍历(DLR)若二叉树为空,则结束返回。否则:访问根结点;前序遍历左子树;前序遍历右子树。(2) 中序遍

3、历(LDR)若二叉树为空,则结束返回。否则:中序遍历左子树;访问根结点;中序遍历左子树。(3) 后序遍历(LRD)若二叉树为空,则结束返回。否则:后序遍历左子树;后序遍历左子树;访问根结点。(三) 实验要求1、掌握二叉树的建立与遍历算法的实现;2、根据实验内容,用C语言编程实现,上机调试运行得出实验结果;3、写出预习报告和实验报告。四、考核方式根据实验课考勤、课前预习情况、课上实验能力、原型系统效果验收与实验报告的完成情况确定最终的实验成绩,实验成绩占课程总成绩的10%。五、建议教材与教学参考书1、课程教材1 沈被娜等编.计算机软件技术基础(第三版).北京.清华大学出版社.20002、实验指导

4、书1 计算机软件技术基础实验指导书. 赵俊生(自编). 2009六、编制说明编制者:赵俊生 组长:赵俊生执笔人:赵俊生 编制时间:2009年3月实验一 线性表的建立与遍历一、实验目的进一步理解线性表的逻辑结构和存储结构,掌握线性表的建立与遍历算法二、 实验题目 线性表的建立与遍历三、实验类型 验证性四、实验内容1、给定一个输入序列,建立顺序表,访问输出顺序表中各结点的内容。2、给定一个输入序列,建立线性链表,访问输出线性链表中各结点的内容。五、实验要求根据实验内容,用C语言编程实现,上机调试运行得出实验结果,写出实验报告。六、实验提示1、线性结构中的所有结点按它们之间的关系可以排成一个线性序列

5、: k1,k2,kn其中k1是开始结点,kn是终端结点,ki是ki+1的前驱结点,而ki+1是ki的后继结点(i=1,2,n-1)。通常把上述线性序列称为“线性表”,把线性结构中的结点称为元素或“表目”。将一个线性表存放到计算机中,可以采用不同的方法,其中最简单而自然的就是顺序的方法,即把表目按其索引值从小到大一个接一个地存放在相邻的单元里。顺序方法存储的线性表简称“顺序表”,顺序表是一种紧凑结构。2、常用的链表有单链表和双链表。在单链表中分配给每个结点的存储单元可分为两个部分:一部分存放结点的数据,称为data域,另一部分存放指向结点后续结点的指针,称为next域,终端结点没有后继结点,其n

6、ext域为NULL,在计算机中可以表示成零或负数,另外还需要一个表头变量head指向链表的第一个结点。七、实验报告1、写出每个算法的思想。2、画出算法流程图。3、调试程序出现的问题及解决的方法。4、打印实验报告及程序清单。5、报告给出测试的结果并写出实验体会。6、报告按信息学院统一格式书写。八、范例参考1、顺序表1 向量的建立 做向量的定义如下: typedef ElemType vectorn0输入n个整数,产生一个存储这些整数的向量A的函数如下:void create(A,n)vector A;int n; int i; for(i=1;i=n;i+)scanf(“%d”,Ai);2 向量

7、的插入 做在一个有n个元素的向量A中的第i个元素之前插入一个元素x的函数如下:void insert(A,n,x)vector A;int n,x; int j; if(in) printf(“i值错误!n”); else for(j=n;j=i;j-) Aj+1=Aj; /*将第i个元素及其后的元素后移*/Ai=x;n+; /*向量长度增1*/向量的删除在一个有n个元素的向量A中删除第i个元素的函数如下:void delete (A,n)vector A;int n; int j;if(in)printf(i值错误!n);else for(j=i;j=n;j+)Aj=Aj+1;/*将第i个元

8、素之后的元素前移*/ n-; 向量的查找 在一个有n个元素的向量A中查找元素值为x的元素的函数如下: void find(A,n,x) vector A; int n,x; int i; i=1; while(i=n&Aix)i+; if(idata=x; p-next=s; p=s; else cycle=0; head=head-next; /*删除头结点*/ p-next=NULL; 查找某个结点 在已建立好的单链表(表头指针为head)中查找元素值为x的函数如下: void find(head,x) node *head; int x; node *p; p=head; while(p

9、-data!=x&p!=NULL)p=p-next; if(p!=NULL) printf(结点找到了!n); else printf(结点未找到!n); 求单链表的长度 计算一个已建立好的单链表(表头指针为head)的结点个数的函数如下: int length(head) node head; int n=0; node *p; p=head; while(p!=NULL) p=p-next; n+; return(n); 在单链表中插入一个结点 在单链表中第i个结点(i0)之后插入一个元素为x的结点的函数如下: void insert(head,i,x) node *head; int i

10、,x; node *s,*p; int j; s=(node *)malloc(sizeof(node); /*建立一个待插入的结点s*/ s-data=x; if(i=0) /*如果i=0,则将s所指结点插入到表头后返回*/ s-next=head; head=s; else p=head;j=1; /*在单链表中查找第i个结点,由p所指向*/ while(p!=NULL&jnext; if(p!=NULL) /*若查找成功,则把s插入到其后*/ s-next=p-next; p-next=s; else printf(未找到!n); 从单链表中删除一个结点 做 从单链表中删除一个其值等于给

11、定值x的结点的函数如下: void delete(head,x) node *head; int x; node *p,*q; if(head=NULL)printf(链表下溢!n);/*如果单链表为空,则下溢处理*/ if(head-data=x) /*如果表头结点值等于x值,则删除之*/ p=head; head=head-next; free(p); else q=head;p=head-next; /*从第二个结点开始查找其值为x的结点*/ while(p!=NULL&p-data!=x) if(p-data!=x) /*在查找时,p指向该结点,q指向其前一结点*/ q=p;p=p-n

12、ext; if(p!=NULL) /*若找到了该结点,则进行删除处理*/ q-next=p-next; free(p); else /*未找到时,显示相应信息*/ printf(未找到!n); 建立、遍历单链表(方法二)int count_nohead(LINKLIST *head)/*不带头结点的单链表:输出单链表元素值并计数*/ int i = 0; LINKLIST *p; p = head; printf(输出单链表元素值 : ); while(p != NULL) printf( %c,p-data); i+; p = p-next; printf(n); return i;int

13、count_head(LINKLIST *head)/*带头结点的单链表:输出单链表元素值并计数*/ int i = 0; LINKLIST *p; p = head-next; printf(输出单链表元素值 : ); while(p != NULL) printf( %c,p-data); i+; p = p-next; printf(n); return i;LINKLIST *creatlink_nohead_head(LINKLIST *head) /*用头插入法建立不带头结点的单链表*/ LINKLIST *t; char ch; printf(单链表元素值为单个字符, 连续输入,

14、$为结束字符 : ); while(ch = getchar()!= $) t = (LINKLIST *) malloc(sizeof(LINKLIST); t-data = ch; t-next = head; head = t;return(head);LINKLIST *creatlink_head_head(LINKLIST *head) /*用头插入法建立带头结点的单链表*/ LINKLIST *t; char ch; t = (LINKLIST *)malloc(sizeof(LINKLIST); head = t; t-next = NULL; printf(单链表元素值为单个

15、字符, 连续输入,$为结束字符 : ); while(ch = getchar()!= $) t = (LINKLIST *) malloc(sizeof(LINKLIST); t-data = ch; t-next = head-next; head-next = t; return(head);LINKLIST *creatlink_nohead_rail(LINKLIST *head)/*用尾插入法建立不带头结点的单链表*/ LINKLIST *last, *t; char ch; last = head; printf(单链表元素值为单个字符, 连续输入,$为结束字符 : ); whi

16、le (ch = getchar() != $) t = (LINKLIST *)malloc(sizeof(LINKLIST); t-data = ch; t-next = NULL; if (head = NULL) head = t; last = t; else last-next = t; last = t; return (head);LINKLIST *creatlink_head_rail(LINKLIST *head)/*用尾插入法建立带头结点的单链表*/ LINKLIST *last, *t; char ch; t = (LINKLIST *)malloc(sizeof(L

17、INKLIST); head = t; last = t; t-next = NULL; printf(单链表元素值为单个字符, 连续输入,$为结束字符 : ); while (ch = getchar() != $) t = (LINKLIST *)malloc(sizeof(LINKLIST); t-data = ch; t-next = NULL; last-next = t; last = t; return (head);LINKLIST *creatlink_order_head(LINKLIST *head)/*建立带头结点的有序单链表*/ LINKLIST *t, *p, *q

18、; char ch; t = (LINKLIST *)malloc(sizeof(LINKLIST); head = t; t-next = NULL; printf(单链表元素值为单个字符, 连续输入,$为结束字符 : ); while (ch = getchar() != $) t = (LINKLIST *)malloc(sizeof(LINKLIST); t-data = ch; q = head; p = head-next; while( p != NULL & p-data next; q-next = t; t-next = p; return(head);main() LIN

19、KLIST *head, *a1, *a2, *c; int num = 0,loop,j; char ch; loop = 1; while (loop) printf(nn); printf( 1 - 建立单链表(头插入,不带头结点)n); printf( 2 - 建立单链表(头插入,带头结点)n); printf( 3 - 建立单链表(尾插入,不带头结点)n); printf( 4 - 建立单链表(尾插入,带头结点)n); printf( 请选择项号 : ); scanf(%d,&j); fflush(stdin); printf(nn); if(j = 1 & j = 10) swit

20、ch(j) case 1: printf(n 建立单链表nn); head = NULL; head = creatlink_nohead_head(head); fflush(stdin); num = count_nohead(head); printf(单链表元素个数 = %dn, num); break; case 2: printf(n 建立单链表nn); head = NULL; head = creatlink_head_head(head); fflush(stdin); num = count_head(head); printf(单链表元素个数 = %dn, num); b

21、reak; case 3: printf(n 建立单链表nn); head = NULL; head = creatlink_nohead_rail(head); fflush(stdin); num = count_nohead(head); printf(单链表元素个数 = %dn, num); break; case 4: printf(n 建立单链表nn); head = NULL; head = creatlink_head_rail(head); fflush(stdin); num = count_head(head); printf(单链表元素个数 = %dn, num); b

22、reak; printf(结束此练习吗? (0 - 结束 1 - 继续) : ); scanf(%d,&loop); printf(n); 实验二 二叉树的建立与遍历一、 实验目的进一步理解二叉树的逻辑结构和存储结构,掌握二叉树的建立与遍历算法。二、 实验题目二叉树的建立与遍历三、 实验类型验证性四、实验内容1、用二叉链表创建二叉树输入根结点值;若左子树不空,则输入左子树,否则输入一个结束符;若右子树不空,则输入右子树,否则输入一个结束符。例如:FCADBEGHP 其中表示结束符2、遍历该二叉树(1) 先序遍历(DLR)若二叉树为空,则结束返回。否则:访问根结点;先序遍历左子树;先序遍历右子树

23、。(2) 中序遍历(LDR)若二叉树为空,则结束返回。否则:中序遍历左子树;访问根结点;中序遍历左子树。(3) 后序遍历(LRD)若二叉树为空,则结束返回。否则:后序遍历左子树;后序遍历左子树;访问根结点。五、实验要求根据实验内容,用C语言编程实现,上机调试运行得出实验结果,写出实验报告。六、实验提示1、以二叉链表的存储结构的方式创建如下图的二叉树creatree 可以采用数据类型定义:typedef struct node datatype data; /每个结点的数据域 struct node *lchild, *rchild; / 结点的左孩子指针域lchild,右孩子指针域rchild

24、JD;2试以上题已建立的二叉链表为已知二叉树,编写按先序、中序和后序遍历二叉树的算法七、实验报告1、写出每个算法的思想。2、画出算法流程图。3、调试程序出现的问题及解决的方法。4、打印实验报告及程序清单。5、报告给出测试的结果并写出设计体会。6、报告按信息学院统一格式书写。八、范例参考1、 问题描述(两种方法建立二叉树)1) 做二叉树的建立:设有一棵二叉树如图(a),将二叉树模拟为完全二叉树从根开始对结点进行编号,编号从1 开始,结果如图(b)所示。在运行过程中要求输入结点对应的编号和值时,请按图(c)中的数据输入,最后以编号 I=0;结点值x=$结束。2) 二叉树中序遍历:对建立的二叉树进行

25、中序遍历,并输出遍历结果.中序遍历算法可以用递归算法实现,也可以用非递归算法实现.2、程序清单#include #include datastru.h#include typedef struct node1char data;struct node1 *lchild,*rchild;BTCHINALR;BTCHINALR * createbt( ) BTCHINALR *q; struct node1 *s30; int j,i,x; printf(建立二叉树,输入结点对应的编号和值,编号和值之间用逗号隔开nn); printf(i,x = ); scanf(%d,%c,&i,&x); wh

26、ile(i != 0 & x != $) q = (BTCHINALR*)malloc(sizeof(BTCHINALR); /*建立一个新结点q*/ q-data = x; q-lchild = NULL; q-rchild = NULL; si = q; /*q新结点地址存入s指针数组中*/ if(i != 1) /*i = 1,对应的结点是根结点*/ j = i / 2; /*求双亲结点的编号j*/ if(i % 2 = 0) sj-lchild = q; /*q结点编号为偶数则挂在双亲结点j的左边*/ else sj-rchild = q; /*q结点编号为奇数则挂在双亲结点j的右边*/ printf(i,x = ); scanf(%d,%c,&i,&x); return s1; /*返回根结点地址*/void inorder(BTCHIN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1