佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1191|回复: 8

Linked list

[复制链接]
发表于 28-2-2009 08:47 PM | 显示全部楼层 |阅读模式
最近在学着linked list...不过不是很明白
希望有谁了解的可以讲解一下...感激不尽
比如说,
1.怎样存user input into the linked list?跟array 一样吗?(用for loop?)
2.怎样get user input from the linked list? 比方说一直用link->next而已吗?
3.How to declare linked list?这样吗?
struct LinkedList
{
int num;
INTEGER *headPtr;
};
typedef struct LinkedList LIST;
那malloc又是做麽的?
回复

使用道具 举报


ADVERTISEMENT

发表于 1-3-2009 02:09 AM | 显示全部楼层

回复 1# 叶归叶 的帖子

你必需先明白 linked list 的操作。。。

linked list 是将所有的节点(nodes)连接起来, 也就是为什么叫做linked。。

一个节点的delaration应该是
struct LinkedList
{
<datatype> item;
LinkedList *next;
};

若是c++的话, 可用template

template <typename T>
struct LinkedList
{
T item;
LinkedList *next;
};

或是要加入constructor
template <typename T>
class LinkedList
{
public:
LinkedList();
LinkedList(T item, LinkedList *next = 0 )
{
     this->item = item;
     this->next = next;
}
T item;
LinkedList *next;
};

你的资料将存于每一个节点中的 item data member / variable, 而用来连接节点的地址将存于 *next;
回复

使用道具 举报

发表于 1-3-2009 06:59 PM | 显示全部楼层
原帖由 叶归叶 于 28-2-2009 08:47 PM 发表
最近在学着linked list...不过不是很明白 &#160;
希望有谁了解的可以讲解一下...感激不尽
比如说,
1.怎样存user input into the linked list?跟array 一样吗?(用for loop?)
2.怎样get user input from the linked list? 比方说一直用link->next而已吗?
3.How to declare linked list?这样吗?
struct LinkedList
{
int num;
INTEGER *headPtr;
};
typedef struct LinkedList LIST;
那malloc又是做麽的?


首先必须明白pointer (指针)的概念 -如&#160; Deferencing(*), AddressOf(&)
这是基础知识,我不多讲,自己看书参考

然后知道如何在运行时(runtime)创建(create)物件(object) :

你可以用new这个operator来完成;或者
用malloc来分离(allocate)一部分记忆体(memory)储存你的新物件

问题1 - 将新物件加入linked list :
不能跟array一样,原因: 1.)你可能不知道到底linked list有多大; 2.)在电脑记忆体里,每个物件的储存位置排列并不连贯(contiguous)
正确方法为:
1.) linked list里每个物件应该有一个variable来记载下一个物件的存放位置;
2.) linked list 里的最后一个物件不会记录下一个存放位置,所以该variable 要指去0 (代表不存在);
3.) 创建一个新的物件,然后将它的存放位置写进linked list的最后一个node的variable

问题2) 怎样游览 linked list?
比方说一直用link->next而已吗?

next只不过是我们自创的function罢了, 掌握pointer后你会明白。。。

问题3) 怎样设立 linked list?
严格来讲, linked list 是很抽象(abstract)的,也只不过是一种记忆体储存物件的概念;
它可以简单到只是指去第一个物件/node 的pointer

[ 本帖最后由 yeenfei 于 1-3-2009 11:23 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2-3-2009 08:35 PM | 显示全部楼层
非常谢谢两位...虽然还不是很明白 不过比之前好很多了...
我会继续研究不明白再来请教两位

原帖由 yeenfei 于 1-3-2009 06:59 PM 发表
2.) linked list 里的最后一个物件不会记录下一个存放位置,所以该variable 要指去0 (代表不存在);
...



代表不存在...是要指去0还是NULL?
回复

使用道具 举报

发表于 2-3-2009 09:23 PM | 显示全部楼层
原帖由 叶归叶 于 2-3-2009 08:35 PM 发表
非常谢谢两位...虽然还不是很明白 不过比之前好很多了...
我会继续研究不明白再来请教两位
代表不存在...是要指去0还是NULL?


NULL就是0啊。。
回复

使用道具 举报

发表于 3-3-2009 09:39 AM | 显示全部楼层

回复 4# 叶归叶 的帖子

O 为节点 ( node )
--- 为连接 ( link )

   O ---- O ---- O ----- O
head                         tail

基本上, linked list 的操作如上图。。 以不同不同的节点,全部连接起来, 成为一个linked list 。

放大后的解构为:
-------------                                   -------------
|  DATA   |                ------------>  |  DATA   |
-------------                |                  -------------
|  NEXT   | ------------|                  |  NEXT   |
-------------                                   -------------

DATA - 存放资料, 可以是int ,double, char, string, 甚至是一个object ( OOP 里面的时候), 可以是任何东西。
如果是 linklist.push_back('a');
那么, data 就是 a

NEXT 是指向另一个node 的地址
回复

使用道具 举报

Follow Us
发表于 3-3-2009 06:51 PM | 显示全部楼层
LINKED LIST的重点在于,PREVIOUS 和NEXT
回复

使用道具 举报

 楼主| 发表于 4-3-2009 10:09 PM | 显示全部楼层
原帖由 yeenfei 于 2-3-2009 09:23 PM 发表


NULL就是0啊。。


不好意思...跟database搞混了
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 6-3-2009 08:51 PM | 显示全部楼层
我今天终于弄明白linked list了...现在要开始学用linked list写program...
真的很谢谢大家
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 17-12-2025 01:01 AM , Processed in 0.136791 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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