链表创建的三种方法
2011-08-03 13:22
423 查看
作为最常用的数据结构之一,链表被广泛应用在各个方面,下至操作系统底层的驱动程序上至各种应用软件,
都处处可以看到链表的身影,皆因其操作的简便与应用的高效性。总结个人目前所学,链表的创建方式主要有
以下几种方法:
方法一:
这个方法应该是最常见的方法,简单明了,但其缺憾是每次插入时都要进行比较,并且每次都要改变tail的值。
方法二:
这个方法需要稍微推敲一下,tail在这里起到了一个中转的作用,实现了高效的数据插入。
方法三:
这个方法有点取巧,但不失其学习性,最后list的value为最后一个结点的地址,而next则指向第一个具有意义的
value的结点。
都处处可以看到链表的身影,皆因其操作的简便与应用的高效性。总结个人目前所学,链表的创建方式主要有
以下几种方法:
方法一:
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的结点。
相关文章推荐
- Tomcat 6.0下创建虚拟目录的三种方法
- ubuntu/linux mint 创建proc文件的三种方法(二)
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- DB2 数据库中得到存储过程创建语句的三种方法
- Postgresql 创建主键并设置自动递增的三种方法
- JavaScript 三种创建对象的方法
- 三种简单的创建多线程和常用的方法
- java创建对象实例的三种方法
- 创建tuple的三种方法
- 创建DirectDraw对象的三种方法
- 创建字符设备的三种方法
- 链表的创建方法归纳
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- Spring创建对象的三种方法之二静态工厂创建(源码)
- ABAP中创建动态内表的三种方法(转载)
- 链表环状检测主要有三种方法
- MicroStation VBA创建直线的三种方法
- 创建Graphics对象的三种方法(转)
- MySQL创建用户的三种方法
- JavaScript 三种创建对象的方法