| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:链表基础的疑问。《易学C++》里的
只看楼主 加入收藏
洪夜馨
Rank: 1
等 级:新手上路
帖 子:85
专家分:5
注 册:2009-6-12
结帖率:91.43%
收藏
已结贴  问题点数:10 回复次数:7 
链表基础的疑问。《易学C++》里的
图片附件: 游客没有浏览图片的权限,请 登录注册
为什么这里的node是什么用的?它怎么能放在char这样的位置?是表示什么意思?
搜索更多相关主题的帖子: 疑问 基础 链表 
2009-10-14 18:47
洪夜馨
Rank: 1
等 级:新手上路
帖 子:85
专家分:5
注 册:2009-6-12
收藏
得分:0 
它好象不是类型啊,可为什么却能放在哪个位置呢?
2009-10-14 18:50
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:10 
楼主能问的更清楚一点吗?
首先node是一个结构,里面的要放什么类型的数据自己定义(所以叫结构,由自己组合的结构。
这里举个好理解的例子
struct 学生信息        //这是一个叫“学生信息”的结构
{   
   学生姓名;          //结构里有这个信息
   学生座号;          //结构里有这个信息
   学生成绩;          //结构里有这个信息

}

在你给的代码中,因为是做链表用的,所以里面不能放自身类型,即在上面node体中不能再放node类型,但是可以是node型指针)。

其他的我不知道你问什么,你能具体指出哪一行吗?
2009-10-14 20:27
zodiac207
Rank: 2
等 级:论坛游民
帖 子:16
专家分:38
注 册:2009-10-14
收藏
得分:0 
就是不明白他想问什么
2009-10-15 09:05
洪夜馨
Rank: 1
等 级:新手上路
帖 子:85
专家分:5
注 册:2009-6-12
收藏
得分:0 
谢谢
2009-10-18 09:57
caolihui1008
Rank: 2
来 自:石家庄
等 级:论坛游民
帖 子:33
专家分:75
注 册:2009-10-19
收藏
得分:0 
好像没完呀!
2009-10-19 09:24
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
回复 2楼 洪夜馨
在前面说明了struct node,就是把node定义为一种结构类型,所以它是一种数据类型,可以放在类似于char的位置上。
2009-10-20 19:32
shining小南
Rank: 2
等 级:论坛游民
威 望:1
帖 子:47
专家分:42
注 册:2010-9-16
收藏
得分:0 
#include "iostream.h"
struct node//定义结点结构类型
{
char data;//用于存放字符数据
node *next;//用于指向下一个结点(后继结点)
};
node * create();//创建链表的函数,返回表头
void showList(node *head);//遍历链表的函数,参数为表头
node *search(node *pRead,char keyword);
void insert(node * &head,char keyWord,char newdata);
int main()
{
node *head;
head=create();//以head 为表头创建一个链表
showList(head);//遍历以head 为表头的链表
search(head,'u');
insert(head, 'u','l');
showList(head);
return 0;
}
node * create()
{
node *head=NULL;//表头指针,一开始没有任何结点,所以为NULL
node *pEnd=head;//表为指针,一开始没有任何结点,所以指向表头
node *pS;//创建新结点时使用的指针
char temp;//用于存放从键盘输入的字符
cout <<"Please input a string end with '#':" <<endl;
do//循环至少运行一次
{
cin >>temp;
if (temp!='#')//如果输入的字符不是结尾符#,则建立新结点
{
pS=new node;//创建新结点
pS->data=temp;//新结点的数据为temp
pS->next=NULL;//新结点将成为表尾,所以next 为NULL
if (head==NULL)//如果链表还没有任何结点存在
{
head=pS;//则表头指针指向这个新结点
}
else//否则
{
pEnd->next=pS;//把这个新结点连接在表尾
}
pEnd=pS;//这个新结点成为了新的表尾
}
}while (temp!='#');//一旦输入了结尾符,则跳出循环
return head;//返回表头指针
}
void showList(node *head)
{
node *pRead=head;//访问指针一开始指向表头
cout <<"The data of the link list are:" <<endl;
while (pRead!=NULL)//当访问指针存在时(即没有达到表尾之后)
{
cout <<pRead->data;//输出当前访问结点的数据
pRead=pRead->next;//访问指针向后移动
}
cout <<endl;
}
node * search(node *head,char keyword)//返回结点的指针
{
node *pRead=head;
while (pRead!=NULL)//采用与遍历类似的方法,当访问指针没有到达表尾之后
{
if (pRead->data==keyword)//如果当前结点的数据和查找的数据相符
{
    cout<<pRead->data<<endl;
return pRead;//则返回当前结点的指针
}
pRead=pRead->next;//数据不匹配,pRead 指针向后移动,准备查找下一个结点
}
return NULL;//所有的结点都不匹配,返回NULL
}
void insert(node * &head,char keyWord,char newdata)//keyWord 是查找关键字符
{
node *newnode=new node;//新建结点
newnode->data=newdata;//newdata 是新结点的数据
node *pGuard=search(head,keyWord);//pGuard 是插入位置前的结点指针
if (head==NULL || pGuard==NULL)//如果链表没有结点或找不到关键字结点
{//则插入表头位置
newnode->next=head;//先连
head=newnode;//后断
}
else//否则
{//插入在pGuard 之后
newnode->next=pGuard->next;//先连
pGuard->next=newnode;//后断
}
}
楼主说的是这个程序中
struct node//定义结点结构类型
{
char data;//用于存放字符数据
node *next;//用于指向下一个结点(后继结点)
};
的node *next;语句吧 我也在学这本书 刚好也看到这
我的理解:node 是已经定义的一个结构体,就想c++给出的int(整型)定义一样,只不过我们自己定义了一个数据类型node(结构体也是一种数据类型),
node *next实际相当于我们熟悉的int *next(我是指本质是一样的),在上面的程序中它是为来了下面的链表 node *create()服务的就指向下一个结点。
也不知道说的正不正确,我也是初学,不过链表这块感觉很难懂,这块就这么不到10页今天是看第二天了 还是没看完
大家都在学这本书,希望以后能多多交流!
2010-10-08 22:21
快速回复:链表基础的疑问。《易学C++》里的
数据加载中...
 
   



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

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