计算机软件技术基础实验一顺序表.docx
- 文档编号:4116287
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:92.88KB
计算机软件技术基础实验一顺序表.docx
《计算机软件技术基础实验一顺序表.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验一顺序表.docx(15页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础实验一顺序表
北京联合大学
实验报告
课程(项目)名称:
计算机软件技术基础实验一(顺序表)
学院:
自动化专业:
信息处理与智能技术
班级:
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 无 六.小结 通过本次实验,我们对顺序表这部分知识有了更加深入的了解与掌握。 在程序编译过程中,我们碰到了很多问题,有时会出现几十个错误,但我们还是一步步认真检查,有时不会的地方询问班里的其他同学,一起讨论,最终完整无误的改正了所有问题。 有时也有很低级的错误出现,说明我们的基础还不够牢固,还需要努力学习。 可能我们的报告中还存在着某些问题,程序也不够尽善尽美,但这次实验让我们都学到了很多,团队的合作,相互的帮助,都是完成一项任务中必不可少的。 我们也将尽我们最大的努力完成今后的每一次实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 实验 顺序