【软件基础】课程实验1及参考程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1线性表的顺序结构
实验目的和要求
熟悉线性表的基本操作在顺序表上的实现。
实验内容
对已建立的顺序表进行插入和删除的基本操作。
实验步骤及要求
1. 根据实验要求新建文件,取名为sy1.cpp。
2. 根据实验内容加入相应的头文件,保存文件。录入以下代码(可复制粘贴)。
#include
#include
3. 根据实验内容定义下面代表顺序表的结构类型,保存文件。录入以下代码(可复制粘贴)。
#define maxlen 100
struct sqlisttp{
i nt elem[maxlen];
i nt last;
};
4. 根据实验内容继续定义下列函数,保存文件。录入以下代码(可复制粘贴)。
//初始化顺序表
void InitList(sqlisttp *&L)
{
L=(sqlisttp *)malloc(sizeof(sqlisttp));
L->last=0;
}
//输出顺序表
void DispList(sqlisttp *v)
{
i nt i;
i f (v->last==0) return;
f or (i=0;i
printf("%d ",v->elem[i]);
p rintf("\n");
}
1
//顺序表的插入操作
void insert(sqlisttp *&v, int i, int x)
{
i nt k;
i f (i<1|| i>v->last+1)
printf("插入位置不合适!\n" );
e lse i
f (v->last>=maxlen-1)
printf( "线性表已满!\n" );
e lse
{
i--; //将顺序表位序转化为elem下标*/
for( k = v->last; k >= i; k-- )
v->elem[k+1] = v->elem[k];
v->elem[i] = x;
v->last++;
}
}
//顺序表的删除操作
void deletev(sqlisttp *&v, int i)
{
i nt k;
i f (i<1|| i>v->last)
printf("删除位置不合适!\n" );
e lse
{
i--; //将顺序表位序转化为elem下标*/
for( k = i+1; k <= v->last; k++ )
v->elem[k-1] = v->elem[k];
v->last--;
}
}
5. 设计主函数对所有操作进行测试。
(1)在sy1.cpp的末尾输入以下测试函数(可复制粘贴),再保存。
void main()
{
s qlisttp *v;
2
p rintf("(1)初始化顺序表L\n");
I nitList(v);
p rintf("(2)依次采用尾插法插入11,12,13,10,30元素\n");
i nsert(v,1,11);
i nsert(v,2,12);
i nsert(v,3,13);
i nsert(v,4,10);
i nsert(v,5,30);
p rintf("(3)输出顺序表v:");
D ispList(v);
p rintf("(4)在第4个元素位置上插入99元素\n");
i nsert(v,4,99);
p rintf("(5)输出顺序表v:");
D ispList(v);
p rintf("(6)删除v的第3个元素\n");
deletev(v,3);
p rintf("(7)输出顺序表v:");
D ispList(v);
}
(2)编译sy1.cpp,无错后运行sy1,将运行结果截图保存。
实验提交要求
先用学号姓名建立文件夹,然后将sy1.cpp源程序和运行结果截图复制进来,最后打包提交。
***************************************************************************
【参考程序】
/*文件名:sy1.c*/
#include
#include
#define maxlen 100
struct sqlisttp{
int elem[maxlen];
int last;
};
void InitList(sqlisttp *&L)
3
{
L=(sqlisttp *)malloc(sizeof(sqlisttp));
L->last=0;
}
void DispList(sqlisttp *v)
{
int i;
if (v->last==0) return;
for (i=0;i
printf("%d ",v->elem[i]);
printf("\n");
}
void insert(sqlisttp *&v, int i, int x)
{
int k;
if (i<1|| i>v->last+1)
printf("插入位置不合适!\n" );
else if (v->last>=maxlen-1)
printf( "线性表已满!\n" );
else
{
i--; //将顺序表位序转化为elem下标*/
for( k = v->last; k >= i; k-- )
v->elem[k+1] = v->elem[k];
v->elem[i] = x;
v->last++;
}
}
void deletev(sqlisttp *&v, int i)
{
int k;
if (i<1|| i>v->last)
printf("删除位置不合适!\n" );
else
{
i--; //将顺序表位序转化为elem下标*/
4