计算机软件.docx
- 文档编号:7826086
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:9
- 大小:40.23KB
计算机软件.docx
《计算机软件.docx》由会员分享,可在线阅读,更多相关《计算机软件.docx(9页珍藏版)》请在冰豆网上搜索。
计算机软件
实验一线性表的建立与遍历
一、实验目的
进一步理解线性表的逻辑结构和存储结构,掌握线性表的建立与遍历算法
二、实验类型
验证性
三、实验内容
1、给定一个输入序列,建立顺序表,访问输出顺序表中各结点的内容。
2、给定一个输入序列,建立线性链表,访问输出线性链表中各结点的内容。
四、实验要求
根据实验内容,用C语言编程实现,上机调试运行得出实验结果,写出实验报告。
五、实验提示
1、线性结构中的所有结点按它们之间的关系可以排成一个线性序列:
k1,k2,…,kn
其中k1是开始结点,kn是终端结点,ki是ki+1的前驱结点,而ki+1是ki的后继结点(i=1,2,…,n-1)。
通常把上述线性序列称为“线性表”,把线性结构中的结点称为元素或“表目”。
将一个线性
表存放到计算机中,可以采用不同的方法,其中最简单而自然的就是顺序的方法,即把表目按其索引值从小到大一个接一个地存放在相邻的单元里。
顺序方法存储的线性表简称“顺序表”,顺序表是一种紧凑结构。
2、常用的链表有单链表和双链表。
在单链表中分配给每个结点的存储单元可分为两个部分:
一部分存放结点的数据,称为data域,另一部分存放指向结点后续结点的指针,称为next域,终端结点没有后继结点,其next域为NULL,在计算机中可以表示成零或负数,另外还需要一个表头变量head指向链表的第一个结点。
六、实验步骤
1、顺序表
顺序表的建立(输入与输出)
#include
typedefintvector[10];
voidcreate(vectorA,intn)
{inti;
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
}
voidmain()
{
vectorA;
create(A,10);
inti;
for(i=1;i<=10;i++)
printf("\n%d",A[i]);
}
2、链表
链表的建立
#include“stdio.h”
#include“malloc.h”
typedefstructwww
{
intdata;
structwww*next;
}node;
voidcreat()
{
node*head,*p,*s;
intx,cycle=1;
head=(node*)malloc(sizeof(node));
p=head;
while(cycle)
{
scanf("%d",&x);
if(x!
=0)
{
s=(node*)malloc(sizeof(node));
s->data=x;
p->next=s;
p=s;
}
elsecycle=0;
}
head=head->next;
p->next=NULL;
}
Voidmain()
{creat();}
实验报告
一、算法思想
把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法叫顺序存储方法,用顺序存储方法存储的线性表简称为顺序表。
在顺序表中,每个结点的存储地址是该结点在表中的位置的线性函数。
只要知道基地址和每个结点的大小,就可在相同时间内求出任一结点的存储地址,是一种随机存取结构。
二、实验结果:
三、实验中遇到的问题
1、在链表的建立中,由于对C语言环境的不熟悉,导致连最基本的C语言开始都不会,在同学和老师的帮助下了解了每个函数的含义,最后终于编好了第一个程序。
四、实验结果分析
经过几节课的练习,掌握了顺序表的建立和链表的建立,并熟悉了C语言的编程环境,对计算机软件有了一定的认识。
五、体会
由于本次实验时间时间不长,只了解了计算机最基础的顺序表和链表的建立,对C语言编程环境有了更加一步的认识。
对今后的学习和实习提供了不小的帮助。
实验二二叉树的建立与遍历
一、实验目的
进一步理解二叉树的逻辑结构和存储结构,掌握二叉树的建立与遍历算法。
二、实验题目
二叉树的建立与遍历
三、实验类型
验证性
四、实验内容
1、用二叉链表创建二叉树
①输入根结点值;②若左子树不空,则输入左子树,否则输入一个结束符;
③若右子树不空,则输入右子树,否则输入一个结束符。
例如:
FCA▲▲DB▲▲▲E▲GH▲▲P▲▲其中▲表示结束符
2、遍历该二叉树
(1)先序遍历(DLR)
若二叉树为空,则结束返回。
否则:
①访问根结点;
②先序遍历左子树;
③先序遍历右子树。
(2)中序遍历(LDR)
若二叉树为空,则结束返回。
否则:
①中序遍历左子树;
②访问根结点;
③中序遍历左子树。
(3)后序遍历(LRD)
若二叉树为空,则结束返回。
否则:
①后序遍历左子树;
②后序遍历左子树;
③访问根结点。
五、实验要求
根据实验内容,用C语言编程实现,上机调试运行得出实验结果,写出实验报告。
六、实验提示
1、以二叉链表的存储结构的方式创建如下图的二叉树creatree
可以采用数据类型定义:
typedefstructnode
{datatypedata;
structnode*lchild,*rchild;
}JD;
2.试以上题已建立的二叉链表为已知二叉树,编写按先序、中序和后序遍历二叉树的算法.
四、实验程序
1二叉树的建立
2、程序清单
#include
#include"datastru.h"
#include
typedefstructnode1
{chardata;
structnode1*lchild,*rchild;
}BTCHINALR;
BTCHINALR*createbt()
{BTCHINALR*q;
structnode1*s[30];
intj,i,x;
printf("\n\n");
printf("i,x=");
scanf("%d,%c",&i,&x);
while(i!
=0&&x!
='$')
{q=(BTCHINALR*)malloc(sizeof(BTCHINALR));
q->data=x;q->lchild=NULL;q->rchild=NULL;
s[i]=q;
if(i!
=1)
{j=i/2;
if(i%2==0)s[j]->lchild=q;
elses[j]->rchild=q;}
printf("i,x=");
scanf("%d,%c",&i,&x);}
returns[1];
}
voidinorder(BTCHINALR*bt)
{if(bt!
=NULL)
{inorder(bt->lchild);
printf("%c",bt->data);
inorder(bt->rchild);}
}
voidinorder_notrecursive(BTCHINALR*bt)
{BTCHINALR*q,*s[20];
inttop=0;
intbool=1;
q=bt;
do{while(q!
=NULL)
{top++;s[top]=q;q=q->lchild;}
if(top==0)bool=0;
else{q=s[top];
top--;
printf("%c",q->data);
q=q->rchild;}
}while(bool);
}
main()
{BTCHINALR*bt;
charch;
inti;
bt=createbt();i=1;
while(i){
printf("\n:
");
fflush(stdin);
scanf("%c",&ch);
if(ch=='y')inorder(bt);elseinorder_notrecursive(bt);
printf("\n");
printf("\n:
");
fflush(stdin);
scanf("%d",&i);
}
}
实验报告
一、算法思想
二叉树遍历
(1)先序遍历(DLR)
若二叉树为空,则结束返回。
否则:
①访问根结点;
②先序遍历左子树;
③先序遍历右子树。
(2)中序遍历(LDR)
若二叉树为空,则结束返回。
否则:
①中序遍历左子树;
②访问根结点;
③中序遍历左子树。
(3)后序遍历(LRD)
若二叉树为空,则结束返回。
否则:
①后序遍历左子树;
②后序遍历左子树;
③访问根结点。
二、实验结果
三、实验中遇到的问题与体会
此次试验由于时间紧迫,加上对c语言编程的熟悉和C++软件的还是不熟练,并没有按要求完成所有步骤,但此次的程序在实验指导书中较为详细,通过与同学的交流,最终还是勉强写了出来。
二叉树是一种最基本最典型的排序树,也是最基础的。
通过学习二叉树的建立与遍历,了解数的存取与遍历方法,这对以后的学习至关重要。
基础知识是以后学习的根基,完善的掌握基础知识是我们学习的关键,所以在学习的过程中绝不能忽略基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件