13 12
发新话题
打印

跟大家讨论几道数据结构题

跟大家讨论几道数据结构题

1、设输入元素为1,2,3,P,A,输入次序为123PA,元素经过一个栈后到达输出端,当所有元素均到达输出端后,有哪些序列可以作为高级语言的变量名?

我算的结果是:AP321,PA321,P3A21,P32A1,P321A,不知道对不对,用的方法就是出栈的规律,又觉得这题又不能这么简单,而且,我的列举的可能也不对,所以请教大家。

2、设A是含有N个分量的整数数组,写出求A中N个整数的平均值的递归定义。

我一时弄不清楚这个题的递归出口了,一看觉得好简单,可是却没有思路。

请各位不吝赐教!!

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

第一题对的

第二题出口就是(n==1),n是所求平均值中包含的变量个数。

TOP

十分感谢你!!!!

那第二题的算法应该是这样的吧:

Func average(VAR a:ARRAY [1..n] of integer):integer

VAR b:integer;

if n=1 then [b:=a[1];return b;]

else b:=average(a[n-1])

endf

如果正确,请告之,如果不对,请讲之,谢谢啦!!!

[此贴子已经被作者于2005-1-13 15:57:03编辑过]

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

(兄弟水平不咋样,不善于具体实现)

没用过pascal,语法不知道

我觉得return应该放到最后,在两个分支都要有返回。

begin

if n=1

then

b:=a[1];

else

b:=average(a[n-1]);

return b;

endp

TOP

对不起,我想我的算法根本不对。

[此贴子已经被作者于2005-1-13 16:12:43编辑过]

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

func average(a: ARRAY [1..n] OF integer):integer

if n=1 then return a[1]

else return ((a[n-1]+(n-1)*average(a[n-1]))/n)

endf

不知道这样是否正确,请大家指点

我只是对a[2]至a[n]做和有点晕,不知道这个表达式如何表达,我知道这是这道题的关键

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

如果是用链表做,还可以用p^.next来表示下一个呢,可是用数组就不会了,唉,郁闷。

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

数组问题,用下标解决

TOP

大概应该是这样,如果不对,请大家多指教,为了大家看得清楚,我用类C写的。多谢你们的帮助啦

float average(n,j:integer,float a[])

{

float aver;

if(n==0) aver=a[0];

else aver=a[n]+average(n-1,j,a);

if(n==j) aver=aver/(j+1);

reuturn(aver);

}

有时候,有时候,我会相信一切有尽头 相聚离开都有时候,没有什么会永垂不朽 可是我,有时候,宁愿选择留恋不放手 等到风景都看透, 也许你会陪我看细水长流……

TOP

JJ,上机试一下不就知道了,大不了搞几个断点或者监视变量。看着,不如运行。

else aver=a[n]+average(n-1,j,a);

if(n==j) aver=aver/(j+1);//这行可以不要,可以在上面一行用1/2取平均

[此贴子已经被作者于2005-1-15 12:57:10编辑过]

TOP

 13 12
发新话题