LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 905|回复: 3

我昨天看到链栈,有点不明白的地方.

[复制链接]
发表于 2004-3-16 12:52:19 | 显示全部楼层 |阅读模式
这些天在自学数据结构.昨天看到链栈哪里.有几点疑问希望各位给我说说.
[php]
/*算法3.4*/
/*输入 top, 入栈元素x */
/*输出X入栈后的top */
#include"stdio.h"
struct node                        /*定义结点类型*/
{
        /*定义结点数据类型*/
        ET d;                        
        struct node *next;               
};                                       
/*这里是第一个问题:这里绘声结构体定义后有一个分号,书上的标准也有分号,有一次我在Torboc 上忘了加,编译通过了.想不通*/
pushll (top,x)
ET x;
struct node **top;            
/*这里也是一个,为什么有top两个星号呀?我觉得一个应该够了吧*/
{                                       
/*这里也是一个,我觉这个大括号加在pushll函数下面的ET X;之前呀*/
        struct node *p;
        p=(struct node *)malloc(sizeof(struct node));
        p->d=x;
        p->next= *top;
        *top=p;
        return;
}
[/php]
我知道这里都是高手,我是真心的希望大家给我答复的.
发表于 2004-3-16 15:40:46 | 显示全部楼层

re:

第一个问题,很简单,C和C++的标准,struct和class后面都有分号‘;’
turbo C没有检查出来,说明了编译器检查不够严格。

第二个问题很好,这里应该就是两个*。因为它传入的是一个指向指针的指针,
在林锐的《高质量C/C++编程》里面关于内存的那一章有一个例子,跟这个一样。但是不鼓励写这样的函数,因为这样将函数内动态分配的变量传出来很难看。你这个函数可以改写为
char *pushll(char *top,ET x)
{
  struct node *p;
p=(struct node *)malloc(sizeof(struct node));
p->d=x;
p->next= top;
return p;
}  //此处将top传会给主调用函数
或者
void pushll(char *&top,ET x)
{
struct node *p;
p=(struct node *)malloc(sizeof(struct node));
p->d=x;
p->next= *top;
top=p;
}  //使用引用传递,此时top在函数内的变化可以影响到外面

第3个问题是这样的,写得并没有错,但是可能现在很多编译器都不支持这样得
K&R风格的C语言语法了,也许你看的书是老版书,或者是老人家写的,呵呵

当然原来那个函数那样写没有错,但是建议用改的方法中的一种,二级指针传递参数,确实有些晦涩。

自己学习数据结构是有些困难,尤其是起步,楼主加油。
但是建议找一些比较新的书看,写的例子程序应该尽量跟现行的程序标准风格相符的比较好。
祝楼主学习一帆风顺。
发表于 2004-3-16 16:27:35 | 显示全部楼层

re

#include <stdlib.h>
#define Max 100
struct List
{
         int Number;
         char Name[Max];
         char Sex[Max];
         char Single[Max];
         int Age;
};
typedef struct List Node;
typedef Node *Link;

void main()
{
       Link New;
       int Num;
       char DataName;
       char DataSex;
       int DataAge;
       int i;
       New = (Link) malloc(sizeof(Node));
       if(New == NULL)
       {
                 ....................
       }
}
省略,我这样写还可以吧
 楼主| 发表于 2004-3-16 18:27:08 | 显示全部楼层
谢谢哥哥们
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表