| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13166 人关注过本帖, 10 人收藏
标题:[原创]数据结构与算法基本程序合集
取消只看楼主 加入收藏
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
并且我已经说过了,以上所有程序均在VC++6.0环境下调试通过,运行正常

努力成为菜鸟!
2007-10-27 08:46
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
以下是引用nuciewth在2007-10-27 11:36:22的发言:

我没有别的意思只是觉得l=(L)malloc(sizeof(L));
按理来说,申请的指针类型和分配空间的类型应该不一样吧。
像是这样的
p=(node*)malloc(sizeof(node))
我们老师是这样教的。所以我就是这样记的了。

呵呵,你们老师只讲了一半。当类型是实类型(非指针)时,是按你写的这样子的,实类型名后要加*;
当类型是指针类型的时候,名称后面的*就不要加了。至于sizeof函数中的参数,用实类型和指针类型都行。
呵呵,下次别忘了哦


努力成为菜鸟!
2007-10-27 12:00
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
以下是引用giant611在2007-10-27 14:07:07的发言:
好是好,就是太冗余了,尤其是链表那一块,每次都建一下链表,提倡obj

楼上说的很对,从程序上说是这样的。不过这程序主要是以前给学生当课堂上的例程讲解的,所以每次都一步一步来的,不然大专学生听数据结构有点困难的。这些程序如果要去用的话可以根据自身情况加以修改的。


努力成为菜鸟!
2007-10-27 14:23
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
以下是引用nuciewth在2007-10-27 16:29:22的发言:

真的啊.
老师你的意思是说sizeof(node)==sizeof(node*)
是这样的吗?

你还不理解我的意思。。。是前面那个不用加*号,如果它已经是指针类型。。。汗那。。。


努力成为菜鸟!
2007-10-27 16:31
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
呵呵,没事,讨论一下也好,版主你还是很有水平和见解的。我再仔细说一下吧。你看看想下呵。

首先我有如下定义:
#define NULL 0 /*宏定义*/
typedef struct node /*定义结点类型的数据结构*/
{
char c; /*数据域,类型为字符型*/
struct node *next; /*指针域,类型为本结构体类型*/
}*L; /*类型重定义,即Node和*L和struct node等价*/

注意最后一句注释,此时Node和*L和struct node等价

然后我用上面的链表结点定义指针:
L l,p,q; /*用指针类型定义三个结点类型的指针*/

这个时候L和*node是等价的对吗?

由于l是指针,在C中没有分配到内存,所以我要给它分配空间,即
l=(L)malloc(sizeof(L)); /*分配内存空间*/

这句话和
1、l=(node*)malloc(sizeof(L));
2、l=(node*)malloc(sizeof(node));
3、l=(L)malloc(sizeof(node));

都是等价的。

至于为什么我都用L而不用node,是因为在这类程序中,使用指针比较灵活,通常定义一个指针而不是直拉用实类型node。


这下应该明白了吧?

再不明白的话就建议你再复习下数据结构的教材了呵。

努力成为菜鸟!
2007-10-27 17:14
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
静思的实验已经给出结果了。我再说明一下,大家看看是不是这样的。

l=(L)malloc(sizeof(L));

第一个参数(L)是类型,第二个参数(L)是大小,两个参数的意义和作用是不一样的。
当第一个参数为实类型时,如node,则需要用node*,而当第一个参数是指针类型时,如L,则不需要*,直接写L。对于这一点大家都没意见。

现在大家的问题在第二个参数上。第二个参数的作用是确定待分配内存空间的大小,仅此而已,和类型没有任何关系。如果你预先知道需要分配的空间大小(如4),你甚至可以直接写sizeof(4),所以后面的参数即可以用L,也可以用node,但不是node*,因为这个表示没有意义。


最后说明,如果大家还是有疑问,请把我的程序复制到VC++或者其它编译器中运行,你们可以试着把l=(L)malloc(sizeof(L))用我给出的四种不同形式替换,看看结果有没有问题。

对于这个问题我本人的讨论到此。

努力成为菜鸟!
2007-10-27 20:57
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
小朋友言重了,年轻人容易激动呵。你有提问的权利,我也有不回答的权利嘛,而且我回答了好多次了,讲不明白我也没办法呀。你说是吧?

努力成为菜鸟!
2007-10-27 21:38
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
关于程序中错误的郑重道歉
各位网友:
由于本人学识浅薄,加之操作疏忽,因而在上传之贴中存在一处严重的错误,即“l=(L)malloc(sizeof(L))”。由于本人知识储备不足,毕业及从教来一直认为L等价于struct node,造成程序潜在的错误。期间有多位网友不讹指正,但由于本人在执行这些程序中,所存在的错误一直没暴露出来,因而一直认为该程序正确无误而未加调试。
在此,对本人的愚昧无知和粗心大意表示最真诚的道歉!
感谢各位网友的严词批评,这对本人是一次很好的教育。在此仅想说明一点,本人不才,但从事学术研究也已四年有余,对于面子一说无从谈起,这次低级错误实为疏忽所致,敬请大家原谅。
本人会立即改正程序中中这个错误,并请大家继续批评指正,是为心声。



网友:cobby

努力成为菜鸟!
2007-10-27 22:23
快速回复:[原创]数据结构与算法基本程序合集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012085 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved