您的位置:首页 > 其它

链表创建的三种方法

2011-08-03 13:22 423 查看
作为最常用的数据结构之一,链表被广泛应用在各个方面,下至操作系统底层的驱动程序上至各种应用软件,

都处处可以看到链表的身影,皆因其操作的简便与应用的高效性。总结个人目前所学,链表的创建方式主要有

以下几种方法:

方法一:

struct link_node {
struct link_node *next;
int value;
};
struct link_node *list = NULL;
struct link_node *tail = NULL;
struct link_node *node;

for ( i = 0; i < n; i++ ) {
node = (struct link_node *)malloc(sizeof(struct link_node));
node->next = NULL;
node->value = ??;
if ( tail != NULL ) {
tail->next = node;
tail = node;
}
else {
list = tail = node;
}
}


这个方法应该是最常见的方法,简单明了,但其缺憾是每次插入时都要进行比较,并且每次都要改变tail的值。

方法二:

struct link_node *list = NULL;
struct link_node **tail = &list;
struct link_node *node;

for ( i = 1; i <= 5; i++ ) {
node = (struct node *)malloc(sizeof(struct node));
node->next = NULL;
node->value = ??;

*tail = node;
tail = &(node->next);
}


这个方法需要稍微推敲一下,tail在这里起到了一个中转的作用,实现了高效的数据插入。

方法三:

struct link_node *list = (struct node *)malloc(sizeof(struct node));
list->next = NULL;
list->value = (int)list;

struct link_node *node;

for ( i = 1; i <= n; i++ ) {
node = (struct node *)malloc(sizeof(struct node));
node->next = NULL;
node->value = ??;

(struct link_node *)(list->value)->next = node;
list->value = (int)node;
}


这个方法有点取巧,但不失其学习性,最后list的value为最后一个结点的地址,而next则指向第一个具有意义的

value的结点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: