软件基础作业1顺序表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的和要求
1、验证顺序表及其基本操作的实现;
2、掌握线性表的基本操作:查找、插入、删除等运算在顺序存储结构上的运算。
3、上机前写好算法草稿,程序中要有合适的输入输出提示语句。
4、记录运行结果,记录调试过程中遇到的问题及解决办法。
二、主要实验仪器和设备
计算机、vc++6.0
三、本次实验内容
1.写出在顺序存储结构下逆转线性表的算法,要求使用最少的附加空间。
(1)算法说明:此题只需将线性表中第一个和最后一个、第二个和倒数第二个……通过第三个变量交换即可。
(2)程序清单:
#include
void crt_sq_list(int v[],int n)
{ int i;
printf("input %d data:\n",n);
for(i=0;i scanf("%d",&v[i]); } void nz_sq_list(int a[],int n) { int i,t; for(i=0;i {t=a[i]; a[i]=a[n-i-1]; a[n-i-1]=t; } return; } void main() { int i,a[10]; crt_sq_list(a,10); printf("逆转前:\n"); for(i=0;i<10;i++) printf("%d\t",a[i]); nz_sq_list(a,10); printf("\n逆转后:\n"); for(i=0;i<10;i++) printf("%d\t",a[i]); } (3)运行结果 : (4)分析与思考:这一题比较简单,只调试了一次就成功了,没有出现什么问题。 2. 设A(a1,a2,...,an)和B(b1,b2,...,bn)为两个有序序列,若n=m,且 ai=bi(1≤i≤n), 则称A=B;若ai=bi(1≤i (1)算法说明:此题我的思路是将“if”语句与“return”语句结合起来使用。若n>m,则必定是 A>B,跳出cp_sq_list函数,否则即n>=m,接着往下执行。从第一个起依次比较A与B中元素的大小并用累加器s记录A与B中相等元素的个数,一旦出现A中元素比B中元素大的情况则可判定A>B,跳出cp_sq_list函数,否则即A 中所有元素均小于等于B中元素,接着往下执行。如果A与B中相等元素的个数等于A中元素的个数且等于B中元素的个数,则可判定A=B,否则A (2)程序清单: #include void crt_sq_list(int v[],int n) { int i; printf("input %d data:\n",n); for(i=0;i scanf("%d",&v[i]); } int cp_sq_list(int a[],int n,int b[],int m) { int i,s=0; if(n>m) return 1; for(i=0;i {if(a[i]>b[i]) return 1; if(s==n&&n==m) return 0; return -1; } void main() { int i,n,m,a[10],b[10]; printf("请输入a表长度(最多为10):\n"); scanf("%d",&n); printf("请输入a中数据:\n"); crt_sq_list(a,n); printf("请输入b表长度(最多为10):\n"); scanf("%d",&m); printf("请输入b中数据:\n"); crt_sq_list(b,m); i=cp_sq_list(a,n,b,m); if(i==-1) printf("A else if(i==0) printf("A=B\n"); else printf("A>B\n"); } (3)运行结果 (4)分析与思考:这一提也是一次调试就成功了。对于这一题,我对比了一下与其他人的算法,觉得我这种思路要简洁的多,他们多采用很多的“if”语句来逐一的进行条件判定得出结论,无论从空间还是时间角度都复杂得很。 3、建立一个含有若干个(10个整型数)元素的顺序表;对该顺序表中依次在第0个元素前插入一个数115,在第4个元素前插入225,在第12个数前插入335,然后输出该顺序表;查找值为x(从键盘输入)的元素,并删除,然后输出该顺序表。(1)算法说明:这一题应该算是基础题,考察线性表的各种基本运算。首先是建表,接着调用ins_sq_list函数进行插入运算。接着调用find_sq_list函数查出待查数在线性表中的位置,再调用del_sq_list函数将其删除。 (2)程序清单: #include void crt_sq_list(int v[],int n) { int i;