班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:
(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
相关函数书上都有一样的或类似的,因此并未遇到什么问题。
五、实验心得体会:
书上的例程是含有两个元素的,改为一个元素的时候花了一些时间。参考了书本,对书上的函数有了比较深刻的理解。
附:部分源程序
#include<iostream.h>
const int maxsize=100;
struct stu
{
int id;
char name[20];
};
struct SeqList
{
stu data[maxsize];
int length;
};
//主函数
int main()
{
SeqList L;
L.length=0;
stu s;
cout<<"请输入三个学生的学号、姓名:\n";
for(int i=0;i<3;i++)
{
cin>>s.id>>s.name;
Insert(&L,s);
}
cout<<endl;
Display(&L);
int ID;
cout<<"请输入要删除的学生的学号";
cin>>ID;
Delete(&L,ID);
cout<<endl;
Display(&L);
return 0;
}
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
1、掌握单链表结构的实现方式;
2、掌握单链表常用算法的实现。
二、实验内容:
1、设计一个链表,要求编程实现如下任务:
(1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。
(3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。
(4) 在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。
三、实验结果:
四、实验中遇到的问题及解决方法:
没太大问题,最大的问题就是不熟悉。
五、实验心得体会:
根据书上的例程,遇到的问题还是与第一次实验差不多,把一个数组元素改为整数元素,很多地方都要改,做不到完全自己写出来。这次实验让我的对链表这种数据结构有了更深的了解,也对指针有了更加广泛的应用,对指针有了更的了解。
附:部分源程序
#include<iostream.h>
struct IntList
{
int data;
IntList *next;
};
//初始化函数
void Init(IntList * head, int x )
{
IntList *p=head;
IntList *s = new IntList;
while( p->next != NULL )
p = p->next;
s->data = x;
s->next = p->next;
p->next = s;
}
//主函数
void main()
{
IntList * head;
head = new IntList;
head->next = NULL;
int sel = 1,x,n;
cout<<"请输入要录入的个数\n";
cin>>n;
cout<<"请输入数据\n";
for( int i=0 ;i < n; i++ )
{
cin>>x;
Init(head,x);
}
cout<<"输入的数据为:\n";
Display(head);
while( sel != 0 )
{
cout<<"选择要进行的操作:1、插入 2、删除 3、查找 0、退出\n";
cin>>sel;
switch ( sel )
{
case 1:
{
int w;
cout<<"请输入要插入的元素和位置\n";
cin>>x>>w;
get_in(head,x,w);
break;
}
case 2:
{
cout<<"请输入要删除的元素\n";
cin>>x;
Delete(head,x);
cout<<"结果为:";
Display(head);
break;
}
case 3:
{
cout<<"请输入要查找的元素\n";
cin>>x;
Search(head,x);
break;
}
case 0: break;
}
}
}
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
1、熟悉利用线性链表解决问题的一般思路;
2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。
二、实验内容:
1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
链表初始化时所输入数据一直添加到头结点的下一个节点,不能按照输入的顺序建立链表 。
解决办法:在有数据添加到链表时,用一个while语句判断头结点指向的第一个节点是否为空,若为空,则直接添加,若不为空,则向后寻找,直到节点的指针的指向为空。然后添加数据,将新的地址赋值后指向为空的指针。
五、实验心得体会:
在对链表进行操作时,一定要注意所定义的指针的位置,不然很容易产生错误操作。在插入数据时一定要注意链表的长度。若插入的位置大于链表的长度则会发生错误。
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
掌握栈的的定义和运算,了解栈的应用。
二、实验内容:
1、堆栈的测试和应用。要求:
设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。
三、实验结果:
四、实验中遇到的问题及解决方法:
第一次把程序用类的方式来写,对类不熟悉,一开始写的很繁琐,后请教老师并修改后可运行。
五、实验心得体会:
通过这次实验,学会了用类的方式写程序。而且明白了,用类写程序不是让生搬硬套,而是要运用类把程序的形式化到最简。
附:部分源程序
#include<iostream.h>
struct SqStack
{
char* data;
int top;
int stacksize;
};
//栈的初始化
void InitStack(SqStack &s,int size)
{
if(size > 0)
{
s.stacksize = size;
s.top = -1;
s.data = new char[size];
}
else cout<<"栈的初始化长度失败";
}
//主函数
void main()
{
SqStack T;
int number[10],i,n;
InitStack(T,10);
cout<<"需要输入的数据的个数为:\n";
cin>>n;
cout<<"请输入数据\n";
for(i=0;i<n;i++)
{
cin>>number[i];
Push( T , number[i] ) ;
}
cout<< "输出结果\n";
for( i = 0 ; i < n ; i++ )
{
Pop(T , number[i] ) ;
cout<< number[i]<<"\t";
}
cout<<"\n";
}
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
掌握队列的定义及其运算,了解队列的应用。
二、实验内容:
1、队列测试和应用。要求:
设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。
三、实验结果:
四、实验中遇到的问题及解决方法:
删除最后一个元素后,在进行入队出队后发生错误。
解决方法:在删除最后一个元素后,修改尾指针。将头指针的值赋给尾指针。
五、实验心得体会:
队列是操作受限的线性表,其基本运算方法与顺序表和链表运算方法基本相同,在应用队列的数据结构时,应定要注意队列的先进先出这一特点。
附:部分源程序
#include<iostream.h>
const int MAX=100;
class SqQueue
{
public:
int data[MAX];
int front;
int rear;
//入队列
void EnQueue(int x)
{
if((rear+1)%MAX==front)cout<<"队列已满";
else{
rear=(rear+1)%MAX;
data[rear]=x;
}
}
//主函数
int main()
{
SqQueue Q[1];
Q[0].front= Q[0].rear=0;
int t[5];
int i;
for(i=0;i<5;i++)
{
cout<<"请输入5个整数:";
cin>>t[i];
}
for(i=0;i<5;i++)
{ Q[0].EnQueue(t[i]);
cout<<Q[0].DeQueue(Q[0])<<" ";
}
return 0;
}
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
1、熟悉二叉树节点的定义和生成方式;
2、熟悉二叉树链式结构的生成方式;
3、掌握二叉树遍历算法的实现。
三、实验内容:
1.设计实现二叉树的建立及遍历算法,要求:
(1)编写创建二叉链式存储结构的二叉树程序并输出。
(2)编写递归实现二叉树的先序、中序、后序遍历算法。
(3)编写主函数测试以上二叉树的创建和遍历函数。
2. 假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。
三、实验结果:
四、实验中遇到的问题及解决方法:
在编二叉树时,刚开始没有设置0作为创建二叉树的结束,造成了所创建的二叉树始终不能结束。最后把0做为结束标志,解决了这个问题。
五、实验心得体会:
通过这次实验,我知道了在编写二叉树是要设置一个数0表示创建输的完成,以及在进行遍历的是要从左边遍历,然后再是右边。要注意保存结点指针,这样可以访问上一个数据,位访问右边的数据提供了方便。
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星 期 X 、 XXX 节 成 绩 一、实验目的:
掌握各种查找算法的特点,测试并验证查找常见算法。
二、实验内容:
1. 建立有序表,采用折半查找实现某一已知的关键字的查找。
2.利用折半查找算法在一个有序表中插入一个元素,并保持表的有序性。
三、实验结果:
四、实验中遇到的问题及解决方法:
一开始先写好了二分查找的程序,在这个基础上一直写不出来在有序表中插入一个元素,并保持表的有序性 ,后来通过请教同学,才恍然大悟,应该先写插入的程序,再将查找改成二分法。
五、实验心得体会:
通过这次实验,我知道了,在编写折半查找时在设置查找区间初值时,要把下边界low=0,上边界high=length-1。
附:部分源程序
#include<iostream.h>
struct List
{
int data[20],length;
};
void Insert_1( List *L, int x )//顺序表的初始化函数
{
int j = L->length-1;
L->data[j+1] = x;
L->length++;
}
void main()//主程序
{
List L;//定义一个顺序表
L.length=0;
int sel=1,x;//sel 为循环标志数
cout<<"请输入10个数据\n";
for(int i=0 ; i<10 ; i++)
{
cin>>x;
Insert_1(&L,x);
}
cout<<"输入的数据为:\n";
Display(&L);
paixu(&L);
cout<<"排序后的数据\n";
Display(&L);
while(sel != 0)
{
cout<<"请选择要进行的操作:"<<"1、查找数据"<<"2、插入数据 "<<"0、退出\n";
cin>>sel;
switch( sel )
{
case 1:
{
cout<<"输入要查找的数据\n";
cin>>x;
cout<<"要查找的数据在第 "<<Search(&L,x)<<" 位\n";
break;
}
case 2:
{
cout<<"输入要插入的数据\n";
cin>>x;
if( Search(&L,x) != 0 )
{
for( i = L.length-1 ; i > Search(&L,x)-1; i-- )
L.data[i+1] = L.data[i];
L.data[i+1] = x;
L.length++;
}
else
{
for( i = L.length-1 ; L.data[i] >= x ; i--)
L.data[i+1] = L.data[i];
L.data[i+1] = x;
L.length++;
}
cout<<"插入后的数据\n";
Display( &L );
}
}
}
}
班级 XXXXX 学号 XXXXXXX 姓名 XXXX
第 X 周 星期 X 、 XXX 节 成绩
一、实验目的:
参照各种排序算法程序样例,验证给出的排序常见算法。
二、实验内容:
输入一组关键字序列分别实现下列排序,并将上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法(任选两种排序方法实现)。
1、直接插入排序。
2、希尔排序。
3、冒泡排序。
4、直接选择排序。
5、快速排序。
6、堆排序。
7、归并排序。
8、基数排序。
三、实验结果:
四、实验中遇到的问题及解决方法:
没有什么问题,就是快速排序写不来。因为是任选两种,所以没有继续。
五、实验心得体会:
排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
在具体操作中对这学期所学的数据结构和以前学的C语言的理论知识得到巩固,也发现自己的不足之处,在以后的上机中应更加注意,通过实际操作,学会数据结构书中程序的编写方法和基本步骤,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
附:部分源程序
#include<iostream.h>
const int maxsize=100;
void main()
{ int i,n,select;
int v[maxsize];
cout<<"请输入数据长度:";
cin>>n;
cout<<"请输入数据:"<<"\n";
for(i=0;i<n;i++)
cin>>v[i];
while(select!=0)
{cout<<"请输入操作选择:1-直接插入排序 2-冒泡排序 3-选择排序 0-结束\n";
cin>>select;
switch (select)
{ case 1:cout<<"直接插入排序\n";
InsertSort(v,n);
for(i=0;i<n;i++)
cout<<v[i]<<"\n";
break;
case 2:cout<<"冒泡排序\n";
Bub(v,n);
for(i=0;i<n;i++)
cout<<v[i]<<"\n";
break;
case 3:cout<<"选择排序\n";
SS(v,n);
for(i=0;i<n;i++)
cout<<v[i]<<"\n";
break;
case 0 :cout<<"使用结束";
break;
}
}
}
一单链表实验内容单链表的定义创建插入和删除操作将数据显示出来源程序includeltstdiohgtdefinenull0defi…
软件技术基础实验报告实验一vc60基本环境与应用学院电气工程学院班级自动化1104姓名马士杰学号20xx13040118实验一vc…
电子科技大学软件技术基础上机实验报告上机实验三实验名称ex31includequotstdiohquotincludequotst…
工程项目管理软件应用实训报告姓名:班级:学号:一、实训概况:这是我们在大学里的最后一次实训,实训的主要内容是工程项目管理软件的应用…
软件工程实训报告专业班级姓名学号指导老师实训时间实训地点成绩软件技术软件3071胡少平20xx20xx1第19周学院机房7502软…
计算机软件技术基础实验报告实验一代码编写于VC60环境下includequotiostreamquotincludeltconio…
大型网络工程实训报告教学单位专业班级学生姓名学号指导教师目录1实训目的12实训时间和地点13实训单位简介14实训内容241实训期间…
顶岗实习报告书姓名王志俊系别信息工程学院专业软件技术实习单位MIDP移动互联网创新工场指导老师王健目录一顶岗实习综述3一实习单位3…
西华大学软件工程系上机实践报告课程名称软件项目管理指导教师夏梅宸上机实践名称Project应用上机实践编号1年级20xx级姓名邱仁…