计算机软件技术基础实验一顺序表Word下载.docx
《计算机软件技术基础实验一顺序表Word下载.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验一顺序表Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
![计算机软件技术基础实验一顺序表Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/27/67d8e83c-5900-459f-b762-ecea1c79dd9f/67d8e83c-5900-459f-b762-ecea1c79dd9f1.gif)
structSList
{intData[MAXSIZE];
intLast;
}SList;
2.函数设计
(1).函数名称:
初始化
①.名字:
InitSList
②.功能:
初始化线性表
③.入口参数:
L
④.出口参数:
⑤.N-S图
⑥.源程序清单
/*初始化线性表*/
structSListInitSList()
{structSListL;
L.Last=-1;
returnL;
}
/*初始化线性表1*/
structSListInitSList1()
{structSListL1;
L1.Last=-1;
returnL1;
/*初始化线性表2*/
structSListInitSList2()
{structSListL2;
L2.Last=-1;
returnL2;
/*初始化线性表3*/
structSListInitSList3()
{structSListL3;
L3.Last=-1;
returnL3;
(2).函数名称:
建立
InputSList
建立无序线性表
structSListInputSList(structSListL)
{intx=0;
printf("
\n请输入数据,结束输入-1!
\n"
);
scanf("
%d"
&
x);
while(x!
=-1)
{L.Data[++L.Last]=x;
if(L.Last==MAXSIZE-1)
{printf("
\n顺序表已满!
break;
}
scanf("
}
(3).函数名称:
建立1
InputSList1
建立有序线性表L1
L1,x
L1
/*建立有序线性表1*/
structSListInputSList1(structSListL1)
\n请按从小到大顺序输入数据,结束输入-1!
{if(L1.Last==-1)
L1.Data[++L1.Last]=x;
elseif(L1.Data[L1.Last]<
=x)
L1.Data[++L1.Last]=x;
else
printf("
\n请按从小到大顺序输入数据!
if(L1.Last==MAXSIZE-1)
}
/*建立有序线性表2*/
structSListInputSList2(structSListL2)
{if(L2.Last==-1)
L2.Data[++L2.Last]=x;
elseif(L2.Data[L2.Last]<
L2.Data[++L2.Last]=x;
if(L2.Last==MAXSIZE-1)
returnL2;
(4).函数名称:
输出
outputSList
输出顺序线性表数据L1
/*输出顺序线性表1数据*/
voidoutputSList(structSListL1)
{intj;
\n顺序表的数据为:
if(L1.Last!
=-1)
for(j=0;
j<
=L1.Last;
j++)printf("
%d"
L1.Data[j]);
elseprintf("
顺序表为空!
\n"
/*输出顺序线性表2数据*/
voidoutputSList2(structSListL2)
\n顺序表2的数据为:
if(L2.Last!
=L2.Last;
j++)printf("
L2.Data[j]);
elseprintf("
(5).函数名称:
插入
InsertSList1
向有序顺序线性表L1中插入数据x
structSListInsertSList1(structSListL1,intx)
{intj=0,i=0;
if(L1.Last==MAXSIZE-1)
{printf("
theList1isfull\n"
returnL1;
while(L1.Data[i]<
x&
&
i!
=L1.Last+1)
{i++;
for(j=L1.Last;
j>
=i;
j--)
L1.Data[j+1]=L1.Data[j];
L1.Data[i]=x;
L1.Last++;
(6).函数名称:
逆置
nizhi
将顺序表L1中的元素逆置
structSListnizhi(structSListL1)
{inti=0,j=L1.Last,k=0;
if(L1.Last<
1)
return(L1);
while(i<
j)
{k=L1.Data[i];
L1.Data[i]=L1.Data[j];
L1.Data[j]=k;
i++;
j--;
(7).函数名称:
删除
shanchu
删除有序顺序表L1中值相同的多余的元素
structSListshanchu(structSListL1)
{inti=0,j=0;
L1.Last)
{if(L1.Data[i]==L1.Data[i+1])
{for(j=i+2;
j++)
L1.Data[j-1]=L1.Data[j];
L1.Last--;
elsei++;
(8).函数名称:
合并
hebing
合并有序顺序表1、2到有序顺序表3中
L1、L2、L3
L3
structSListhebing(structSListL1,structSListL2,structSListL3)
{inti=0,j=0,k=0;
=L1.Last&
=L2.Last)
{if(L1.Data[i]<
L2.Data[j])
{L3.Data[k]=L1.Data[i];
i++;
k++;
}
else
{L3.Data[k]=L2.Data[j];
j++;
=L1.Last)
{L3.Data[k]=L1.Data[i];
k++;
i++;
while(j<
{L3.Data[k]=L2.Data[j];
j++;
L3.Last=k-1;
(9).函数名称:
主函数
main
无
/*主菜单*/
voidmainmenu()
{
|****************************************|\n"
|请输入选项编号(0-7)|\n"
|1--建立有序顺序表1|\n"
|2--在有序顺序表1中插入数据|\n"
|3--将有序顺序表1中元素逆置|\n"
|4--删除顺序表1中值相同的多余的元素|\n"
|5--建立无序顺序表|\n"
|6--建立有序顺序表2|\n"
|7--合并有序顺序表1.2到顺序表3中|\n"
|0--退出系统|\n"
/*主函数*/
voidmain()
structSListL1;
structSListL2;
structSListL3;
intx;
chari,choose;
do
{mainmenu();
choose=getch();
switch(choose)
{case'
1'
:
L1=InitSList();
//建立有序顺序表1
L1=InputSList1(L1);
outputSList(L1);
break;
case'
2'
printf("
请输入要插入的数据x:
"
//向有序顺序线性表1中插入数据x
scanf("
L1=InsertSList1(L1,x);
插入后"
3'
L1=nizhi(L1);
//将有序顺序表1中元素逆置
printf("
逆置后"
outputSList(L1);
case'
4'
L1=shanchu(L1);
//删除顺序表1中值相同的多余的元素
printf("
删除后"
outputSList(L1);
break;
5'
L=InitSList();
//建立无序顺序表
L=InputSList(L);
建立的无序顺序表为\n"
outputSList(L);
6'
L2=InitSList2();
//建立有序顺序表2
L2=InputSList2(L2);
outputSList(L2);
7'
L3=InitSList3();
//合并有序顺序表1.2
L3=hebing(L1,L2,L3);
printf("
合并后的顺序表3为"
outputSList(L3);
0'
exit(0);
//返回主菜单
default:
\n%c为非法选项!
请重新输入!
choose);
printf("
\n按0返回主菜单\n"
i=getch();
while(i=='
四.调试过程
1.问题名称:
逆置出错
问题现象:
例如输入1234,逆置后为4231
解决方法:
将逆置源程序中的if(i<
j)改为while(i<
2.问题名称:
逆置问题
逆置后无显示
将主函数中nizhi(L)改为nizhi(L1)
3.问题名称:
删除问题
例如有序顺序表1122,删除后为122
将if(i<
L1.Last)改为while(i<
4.问题名称:
合并问题
errorC2018:
unknowncharacter'
0xa3'
if后无分号
5.问题名称:
合并时将无序顺序表与有序顺序表2合并
将无序顺序表和有序顺序表1重新命名
6.问题名称:
插入问题
例如在有序顺序表1234中插入字母f后,显示-8589934601234
未解决
五.运行结果分析
1.运行界面
建立有序顺序表1
在有序顺序表1中插入数据
将有序顺序表1中元素逆置
删除顺序表1中值相同的多余的元素
建立无序顺序表
建立有序顺序表2
合并有序顺序表1.2到顺序表3中
2.测试结果
(1).将有序顺序表1中元素逆置
测试项
原始数据
输入
存在问题
空表
空
表长=5(奇数)
12345
54321
表长=6(偶数)
123456
654321
(2).删除顺序表1中值相同的多余的元素
有1组相同元素
12234
1234
有2组连续相同元素
122334
有2组以上不连续相同元素
11223344
(3).向有序顺序线性表1中插入数据x
2
表头
1
11234
表尾
4
12344
表中间
3
12334
位置非法
(4).合并有序顺序表1、2
1、2均为空表
1为空表,2非空
L2:
234
1非空,2为空表
L1:
123
123
1、2均非空
L2:
234
六.小结
通过本次实验,我们对顺序表这部分知识有了更加深入的了解与掌握。
在程序编译过程中,我们碰到了很多问题,有时会出现几十个错误,但我们还是一步步认真检查,有时不会的地方询问班里的其他同学,一起讨论,最终完整无误的改正了所有问题。
有时也有很低级的错误出现,说明我们的基础还不够牢固,还需要努力学习。
可能我们的报告中还存在着某些问题,程序也不够尽善尽美,但这次实验让我们都学到了很多,团队的合作,相互的帮助,都是完成一项任务中必不可少的。
我们也将尽我们最大的努力完成今后的每一次实验。