1、算法:是对特定问题求解步骤的一种描述,是指令的有限序列。1.4 语句的时间复杂度为:(1) (n2)(2) (n2)(3) (n2) (4) (n-1)(5) (n3)1.5 参考程序:main()intX,Y,Z;scanf(“%d, %d, %d”,&X,&Y,Z); if (X=Y)if(X=Z)if (Y printf(“%d, %d, %d”,X,Y,Z);else printf(“%d, %d, %d”,X,Z,Y); else printf(“%d, %d, %d”,Z,X,Y);if(Z=X) if (Y printf(“%d, %d, %d”,Y,Z,X); printf(“
2、%d, %d, %d”,Z,Y,X); printf(“%d, %d, %d”,Y,X,Z);1.6 参考程序:int i,n;float x,a,p; printf(“nn=”);scanf(“%f”,&n);printf(“nx=”);x); for(i=0;inext=p-next;p-next=s ;(10).s-next2.3. 解题思路:将顺序表 A 中的元素输入数组 a,若数组 a 中元素个数为 n,将下标为0,1,2,(n-1)/2 的元素依次与下标为 n,n-1,(n-1)/2 的元素交换,输出数组a 的元素。参考程序如下: float t,a;printf(“nn=”);=
3、n-1;for(i=0;=(n-1)/2; t=ai;ai =an-1-i;an-1-i=t; for(i=0;printf(“%f”,ai);2.4 算法与程序:n;i+) if(aia0ai =a0;a0=t; printf(“%f”,a0);for(i=2;a1ai =a1;a1=t;2.5 算法与程序:int i,j,k,n;float x,t,a; printf(“nx=”);/输入线性表中的元素for (i=0; i i+) /对线性表中的元素递增排序k=i;for (j=i+1; j j+) if (ajak) k=j;if (kj) t=ai;ai=ak;ak=t;i+)/在线
4、性表中找到合适的位置if(aix)break;for(k=n-1;k=i;i-)/移动线性表中元素,然后插入元素 x ak+1=ak;ai=x;i+)/依次输出线性表中的元素2.6 算法思路:依次扫描 A 和 B 的元素,比较 A、B 当前的元素的值,将较小值的元素赋给C,如此直到一个线性表扫描完毕,最后将未扫描完顺序表中的余下部分赋给 C 即可。C 的容量要能够容纳 A、B 两个线性表相加的长度。有序表的合并算法:voidmerge (SeqListA,SeqListB,SeqList *C)inti,j,k; i=0;j=0;k=0;while( i=A.last &=B.last ) i
5、f(A.dataidatak+=A.datai+;datak+=B.dataj+; while(i=A.last )datak+= A.datai+;while(jlast=k-1;2.7 算法思路:依次将 A 中的元素和 B 的元素比较,将值相等的元素赋给 C,如此直到线性表扫描完毕,线性表 C 就是所求递增有序线性表。=A.last) while(jllink-rlink=p-rlink, p-rlink-llink=p-rlink(5) (R-F+M)%M(6) top1+1=top2(7) F=R(8) front=rear(9) front=(rear+1)%n(10) N-13.3
6、 答:一般线性表使用数组来表示的线性表一般有插入、删除、读取等对于任意元素的操作而栈只是一种特殊的线性表栈只能在线性表的一端插入(称为入栈,push)或者读取栈顶元素或者称为“弹出、出栈”(pop)。3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top)删除,一端(rear) 插入。3.5 答:可能序列有 14 种:ABCD; ACBD; ACDB; ABDC; ADCB; BACD; BADC; BCAD; BCDA; BDCA; CBAD; CBDA; CDBA; DCBA。3.6 答:不能得到 4,3
7、,5,6,1,2,最先出栈的是 4,则按 321 的方式出,不可能得到1 在 2 前的序列,可以得到 1,3,5,4,2,6,按如下方式进行 push(1), pop(), push(2), push(3), pop(), push(4), push(5), pop(), pop(), pop(), push(6), pop()。3.7 答:stack3.8 非递归:int vonvert (int no,int a)/将十进制数转换为 2 进制存放在 a,并返回位数int r;SeStack s,*p;P=&s;Init_stack(p); while(no)push(p,no%2); no
8、/=10;r=0;while(!empty_stack(p)pop(p,a+r); r+;return r;递归算法:void convert(int no)if(no/20)Convert(no/2); Printf(“%d”,no%2);else printf(“%d”,no);3.9 参考程序:void view(SeStack s)SeStack *p; /假设栈元素为字符型char c;p=&c=pop(p); printf(“%c”,c);printf(”n”);3.10 答:char3.11 参考程序:void out(linkqueue q)int e;while(q.rear !=q.front )dequeue(q,e); print(e);/打印习题 4 参考答案4.1 选择题:(1). A(2). D(3). C(4). C(5). B(6). B(7). D (8). A(9). B(10). D4.2 填空题:(1) 串长相等且对应位置
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1