终极高手来看一下!

lomos 2003-11-15 02:52:37
一个冒泡排序程序:
摘自严蔚敏 吴伟民合著的《数据结构》类C语言描述,97年版 P16页有这样一个函数
void bubble_sort(a[],int n){
for (i=n-1,change=Ture;i>=&&change;--i){
change=False;
for (j=0;j<i;++j)
if(a[j])>a[j+1]){a[i]<-->a[j];
change=Ture;}
}
}//bubble_sort
晕!想了半天想也不通啊,只有怀疑这个程序是错的

*************************************************************************
第二个问题:王春森教授写的高程的《程序设计》一书中对用递归实现树的前序遍历的一个程序:
#definge M 10
typedef struct tnode{
char data;
struct tnode *child[M];
}TNODE;
TNODE *root;
...
void re_preorder(t,m)
TNODE *t;
int m; /*树的度数*/
{int i;
if (t!=NULL){
printf("%c",t->data);
for (i=0;i<m;i++)
re_preorder(t->child[i],m);
}
}
郁闷!对m的值不理解,要知道一棵树的度数是不定的,二叉树m值才有确定的2啊

*************************************************************************
最后一个:不好意思 :)
二叉树顺序存储描述:
#define maxsize 1024
typedef datatype sqtree[maxsize];
sqtree bt;
则 bt[1],...bt[maxsize-1]为二叉树的存储空间每个单元bt[i]可存放一个类型为
datatype 的数据元素

原文就是这样(不是用严格的C语言写的)
第二行typedef datatype sqtree[maxsize];是么地意思,可以用一个数组替换一个
结构体、整型之类么?第一次看见这样的程序,不知道是不是长了见识了

************************************end*********************************


...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lomos 2003-11-17
  • 打赏
  • 举报
回复
To zhouqingyuan(浪帆)对这个程序
void bubble_sort(a[],int n){
for (i=n-1,change=True;i>=1&&change;--i){
change=False;
for (j=0;j<i;++j)
if(a[j])>a[j+1]){a[i]<-->a[j];
change=True;}
}
}//bubble_sort
你说用change变量,即如果一次遍历没有交换,则说明整个排列是按顺序排的,则终止遍历了。 偶认为change变量在这里没什么用,
不举例子说不清楚,举个例:3 8 1 5 9,则运行过程如下:(一次遍历)
第一次比较得到 3 8 1 5 9 change=Flase
二 3 1 8 5 9 change=True
三 3 1 5 8 9 change=True
四 3 1 5 8 9 这时8>9不用交换,但还是运行了(a[j])>a[j+1])进行了判断,应算
是一次结果 change=Flase再运行至第一个for语句的i>=1&&change时,为假,只进行了一次遍历就跳出整个函数,但这时整个排列还不是按顺序排的,这怎么解释呢?
*********************************************************************************
第二个问题:
void re_preorder(t,m)
TNODE *t;
int m; /*树的度数*/
{int i;
if (t!=NULL){
printf("%c",t->data);
for (i=0;i<m;i++)
re_preorder(t->child[i],m);
}
}
你说 正因为树的度数不定,所以要用m啊,m就是表示是m叉树。
在实际调用时候,是几叉树,m就取几。
但是当m取了确定的值以后,递归的时候那个m值还是不确定啊,而二叉树就不存在这样的问题它每次递归的时候都是2
举个例子帮助小弟也好!

zhouqingyuan 2003-11-15
  • 打赏
  • 举报
回复
至于最后一个问题,typedef datatype sqtree[maxsize];这个意思是说datatype和
sqtree[maxsize]是一会事情,不过要说明的是,maxsize指树中的总节点树木,在
sqtree[maxsize]中存储的是树的一个个的节点,即sqtree类型结构体,而不是你所说的datatype。它是按照完全二叉树来进行对应存储的。datatype表示的是整个二叉树类型。
zhouqingyuan 2003-11-15
  • 打赏
  • 举报
回复
第二个问题,正因为树的度数不定,所以要用m啊,m就是表示是m叉树。
在实际调用时候,是几叉树,m就取几。
zhouqingyuan 2003-11-15
  • 打赏
  • 举报
回复
改正如下:
void bubble_sort(a[],int n){
for (i=n-1,change=True;i>=1&&change;--i){
change=False;
for (j=0;j<i;++j)
if(a[j])>a[j+1]){a[i]<-->a[j];
change=True;}
}
}//bubble_sort
这个冒泡意思是对的,对常规的冒泡进行了一个改进,用change变量,即如果一次遍历如果没有交换,则说明整个排列是按顺序排的,则终止遍历了。
lomos 2003-11-15
  • 打赏
  • 举报
回复
更正:第一个程序的第五行代码多写的一个" ) "
不好意思

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧