一个用伪码编写程序的问题
发布网友
发布时间:2022-05-20 12:19
我来回答
共1个回答
热心网友
时间:2023-10-19 05:42
用伪码编写的程序(仅供参考)
Begin(算法开始)
读入a(1)、a(2)、a(3)、……、a(n)
令k=【n/2】 (【m】表示不大于m的最大整数)
for i=1 to k (从i=1 一直执行到i=k)
t=a(i);
a(i)=a(n+1-i);
a(n-i)=t; &说明:这一段的功能是交换对称的两数
下一个i ,返回
输出a(1)、a(2)、a(3)、……、a(n)
附上我用matlab语言编写的一段代码:
function x=table_change(x)
n=length(x); % n 表示表单数组 x 的大小
k=floor(n/2); % k 表示取n/2的整数部分
for i=1:k
t=x(i);
x(i)=x(n+1-i);
x(n+1-i)=t;
end
在主程序里面输入:
>> x=[1 2 3 4 5 6 7 8];
>> xx=table_change(x)
输出结果为:
xx =
8 7 6 5 4 3 2 1
*解决了任务,呵呵
当然有更简单的编写方式:
function y=table_change1(x)
n=length(x); % n 表示表单数组 x 的大小
for i=1:n
y(i)=x(n+1-i);
end
在主程序里面输入:
>> x=[1 2 3 4 5 6 7 8];
>> xx=table_change1(x)
输出结果也是:
xx =
8 7 6 5 4 3 2 1追问蒽你这个肯定有问题了,单向链表和数组不一样,每个链表由有序节点,各个节点的物理存放是无序的,仅通过各个节点的指针域环环相扣,所以编码是不一样的。^_^
追答是没有太注意
采用头插法,
每一步实现的是这样的过程:
0(初始化)、q为每一步运算的主要节点位置,初始化为第一个;
1、r=q的后续,把q的后续记录下来;
2、q->>next=p,把q的后续指向p(也就是开始),换句话说,把q放在了最开始;
3、p=q,把新的开始设置为新插入的q(下一次循环时,他就是p了);
4、q=r,把下一步要进行运算的主要节点设置为r,也就是当前运算节点的下个节点。
相当于,一队小朋友双手搭着前一个人的肩。从第二个开始,把他挪到第一个人前面去,然后对下一个人做同样操作。
nodetype *invert(nodetype *h)//实现单链表逆置
{ nodetype *p,*q,*r;
if (len(h)next ;
while (q!=NULL)
{ r=q->next ;
q->next =p;
p=q;
q=r;
}
h->next =NULL;
h=p;
return h;
}
}