计算机软件技术基础实验一顺序表.docx

上传人:b****6 文档编号:4116287 上传时间:2022-11-28 格式:DOCX 页数:15 大小:92.88KB
下载 相关 举报
计算机软件技术基础实验一顺序表.docx_第1页
第1页 / 共15页
计算机软件技术基础实验一顺序表.docx_第2页
第2页 / 共15页
计算机软件技术基础实验一顺序表.docx_第3页
第3页 / 共15页
计算机软件技术基础实验一顺序表.docx_第4页
第4页 / 共15页
计算机软件技术基础实验一顺序表.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算机软件技术基础实验一顺序表.docx

《计算机软件技术基础实验一顺序表.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验一顺序表.docx(15页珍藏版)》请在冰豆网上搜索。

计算机软件技术基础实验一顺序表.docx

计算机软件技术基础实验一顺序表

 

北京联合大学

实验报告

 

课程(项目)名称:

计算机软件技术基础实验一(顺序表)

学院:

自动化专业:

信息处理与智能技术

班级:

0910030206成绩:

学号:

2009100302638姓名:

徐琪

学号:

2009100302632姓名:

李京

 

2010年11月30日

一.目的:

(1).掌握线性表的概念.

(2).熟练掌握线性表的顺序存储结构.

(3).熟练掌握线性表在顺序存储结构上的运算.(4).了解测试的思想.

二.内容:

(1).编写算法实现顺序表中元素的逆置。

要求按用户输入的数据建立一个顺序表。

在逆置的过程中使用最少的辅助存储单元。

测试要求:

在空表、长度为奇数和偶数的情况下测试程序运行情况。

(2).己知顺序表中的元素非递减有序排列,编写算法删除顺序表中值相同的多余的元素。

测试要求:

在空表、有1组相同元素、有2组连续相同元素、有2组以上不连续相同元素的情况下测试程序运行情况。

(3).编写算法,在非递减有序的顺序表中,插入一个给定的元素,插入后该顺序表仍然递增有序。

测试要求:

在空表、表头、表尾、表中间插入及位置非法的情况下测试程序运行情况。

(4).有两个顺序表A(有m个元素)和B(有n个元素),其元素均按从小到大的升序排列。

编写算法,将这两个顺序表合并成一个顺序表C,要求C也是按从小到大的升序排列。

测试要求:

在A与B均空、A与B一个为空、A与B均不空的情况下测试程序运行情况。

三.算法设计

1.数据结构

#include

#include

#include

#defineMAXSIZE30

structSList

{intData[MAXSIZE];

intLast;

}SList;

2.函数设计

(1).函数名称:

初始化

①.名字:

InitSList

②.功能:

初始化线性表

③.入口参数:

L

④.出口参数:

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

②.功能:

建立无序线性表

③.入口参数:

L

④.出口参数:

L

⑤.N-S图

⑥.源程序清单

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顺序表已满!

\n");

break;

}

scanf("%d",&x);

}

returnL;

}

(3).函数名称:

建立1

①.名字:

InputSList1

②.功能:

建立有序线性表L1

③.入口参数:

L1,x

④.出口参数:

L1

⑤.N-S图

⑥.源程序清单

/*建立有序线性表1*/

structSListInputSList1(structSListL1)

{intx=0;

printf("\n请按从小到大顺序输入数据,结束输入-1!

\n");

scanf("%d",&x);

while(x!

=-1)

{if(L1.Last==-1)

L1.Data[++L1.Last]=x;

elseif(L1.Data[L1.Last]<=x)

L1.Data[++L1.Last]=x;

else

printf("\n请按从小到大顺序输入数据!

\n");

if(L1.Last==MAXSIZE-1)

{printf("\n顺序表已满!

\n");

break;

}

scanf("%d",&x);

}

returnL1;

}

/*建立有序线性表2*/

structSListInputSList2(structSListL2)

{intx=0;

printf("\n请按从小到大顺序输入数据,结束输入-1!

\n");

scanf("%d",&x);

while(x!

=-1)

{if(L2.Last==-1)

L2.Data[++L2.Last]=x;

elseif(L2.Data[L2.Last]<=x)

L2.Data[++L2.Last]=x;

else

printf("\n请按从小到大顺序输入数据!

\n");

if(L2.Last==MAXSIZE-1)

{printf("\n顺序表已满!

\n");

break;

}

scanf("%d",&x);

}

returnL2;

}

(4).函数名称:

输出

①.名字:

outputSList

②.功能:

输出顺序线性表数据L1

③.入口参数:

L1

④.出口参数:

L1

⑤.N-S图

⑥.源程序清单

/*输出顺序线性表1数据*/

voidoutputSList(structSListL1)

{intj;

printf("\n顺序表的数据为:

\n");

if(L1.Last!

=-1)

for(j=0;j<=L1.Last;j++)printf("%d",L1.Data[j]);

elseprintf("顺序表为空!

\n");

printf("\n");

}

/*输出顺序线性表2数据*/

voidoutputSList2(structSListL2)

{intj;

printf("\n顺序表2的数据为:

\n");

if(L2.Last!

=-1)

for(j=0;j<=L2.Last;j++)printf("%d",L2.Data[j]);

elseprintf("顺序表为空!

\n");

printf("\n");

}

(5).函数名称:

插入

①.名字:

InsertSList1

②.功能:

向有序顺序线性表L1中插入数据x

③.入口参数:

L1,x

④.出口参数:

L1

⑤.N-S图

⑥.源程序清单

structSListInsertSList1(structSListL1,intx)

{intj=0,i=0;

if(L1.Last==MAXSIZE-1)

{printf("theList1isfull\n");

returnL1;

}

while(L1.Data[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++;

returnL1;

}

(6).函数名称:

逆置

①.名字:

nizhi

②.功能:

将顺序表L1中的元素逆置

③.入口参数:

L1

④.出口参数:

L1

⑤.N-S图

⑥.源程序清单

structSListnizhi(structSListL1)

{inti=0,j=L1.Last,k=0;

if(L1.Last<1)

return(L1);

while(i

{k=L1.Data[i];

L1.Data[i]=L1.Data[j];

L1.Data[j]=k;

i++;j--;

}

returnL1;

}

(7).函数名称:

删除

①.名字:

shanchu

②.功能:

删除有序顺序表L1中值相同的多余的元素

③.入口参数:

L1

④.出口参数:

L1

⑤.N-S图

⑥.源程序清单

structSListshanchu(structSListL1)

{inti=0,j=0;

if(L1.Last<1)

returnL1;

while(i

{if(L1.Data[i]==L1.Data[i+1])

{for(j=i+2;j<=L1.Last;j++)

L1.Data[j-1]=L1.Data[j];

L1.Last--;

}

elsei++;

}

returnL1;

}

(8).函数名称:

合并

①.名字:

hebing

②.功能:

合并有序顺序表1、2到有序顺序表3中

③.入口参数:

L1、L2、L3

④.出口参数:

L3

⑤.N-S图

⑥.源程序清单

structSListhebing(structSListL1,structSListL2,structSListL3)

{inti=0,j=0,k=0;

while(i<=L1.Last&&j<=L2.Last)

{if(L1.Data[i]

{L3.Data[k]=L1.Data[i];

i++;k++;

}

else

{L3.Data[k]=L2.Data[j];

j++;k++;

}

}

while(i<=L1.Last)

{L3.Data[k]=L1.Data[i];

k++;i++;

}

while(j<=L2.Last)

{L3.Data[k]=L2.Data[j];

k++;j++;

}

L3.Last=k-1;

returnL3;

}

(9).函数名称:

主函数

①.名字:

main

②.功能:

③.入口参数:

④.出口参数:

⑤.N-S图

⑥.源程序清单

/*主菜单*/

voidmainmenu()

{

printf("|****************************************|\n");

printf("|请输入选项编号(0-7)|\n");

printf("|****************************************|\n");

printf("|1--建立有序顺序表1|\n");

printf("|2--在有序顺序表1中插入数据|\n");

printf("|3--将有序顺序表1中元素逆置|\n");

printf("|4--删除顺序表1中值相同的多余的元素|\n");

printf("|5--建立无序顺序表|\n");

printf("|6--建立有序顺序表2|\n");

printf("|7--合并有序顺序表1.2到顺序表3中|\n");

printf("|0--退出系统|\n");

printf("|****************************************|\n");

}

/*主函数*/

voidmain()

{structSListL;

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("%d",&x);

L1=InsertSList1(L1,x);

printf("插入后");

outputSList(L1);

break;

case'3':

L1=nizhi(L1);//将有序顺序表1中元素逆置

printf("逆置后");

outputSList(L1);

break;

case'4':

L1=shanchu(L1);//删除顺序表1中值相同的多余的元素

printf("删除后");

outputSList(L1);

break;

case'5':

L=InitSList();//建立无序顺序表

L=InputSList(L);

printf("建立的无序顺序表为\n");

outputSList(L);

break;

case'6':

L2=InitSList2();//建立有序顺序表2

L2=InputSList2(L2);

outputSList(L2);

break;

case'7':

L3=InitSList3();//合并有序顺序表1.2

L3=hebing(L1,L2,L3);

printf("合并后的顺序表3为");

outputSList(L3);

break;

case'0':

exit(0);//返回主菜单

default:

printf("\n%c为非法选项!

请重新输入!

\n",choose);

break;

}

printf("\n按0返回主菜单\n");

i=getch();

}

while(i=='0');

}

 

四.调试过程

1.问题名称:

逆置出错

问题现象:

例如输入1234,逆置后为4231

解决方法:

将逆置源程序中的if(i

2.问题名称:

逆置问题

问题现象:

逆置后无显示

解决方法:

将主函数中nizhi(L)改为nizhi(L1)

3.问题名称:

删除问题

问题现象:

例如有序顺序表1122,删除后为122

解决方法:

将if(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

1234

有2组以上不连续相同元素

11223344

1234

(3).向有序顺序线性表1中插入数据x

测试项

原始数据

输入

输出

存在问题

空表

2

2

表头

1234

1

11234

表尾

1234

4

12344

表中间

1234

3

12334

位置非法

1234

(4).合并有序顺序表1、2

测试项

原始数据

输入

输出

存在问题

1、2均为空表

1为空表,2非空

L2:

234

234

1非空,2为空表

L1:

123

123

1、2均非空

L1:

123

L2:

234

122334

六.小结

通过本次实验,我们对顺序表这部分知识有了更加深入的了解与掌握。

在程序编译过程中,我们碰到了很多问题,有时会出现几十个错误,但我们还是一步步认真检查,有时不会的地方询问班里的其他同学,一起讨论,最终完整无误的改正了所有问题。

有时也有很低级的错误出现,说明我们的基础还不够牢固,还需要努力学习。

可能我们的报告中还存在着某些问题,程序也不够尽善尽美,但这次实验让我们都学到了很多,团队的合作,相互的帮助,都是完成一项任务中必不可少的。

我们也将尽我们最大的努力完成今后的每一次实验。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

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

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