您的位置:首页 > 其它

链表--结构与指针使用

2013-11-27 16:24 204 查看
单链表



插入到有序单链表。函数的参数是一个指向链表根指针的指针,以及一个需要插入的新值。

#include <stdlib.h>
#include <stdio.h>
#define FALSE 0
#define TRUE 1
typedef struct NODE
{
struct NODE *link;
int value;
}

int sll_insert( Node **rootp, int new_value )
{
Node	*current;
Node	*previous;
Node	*new;

current = *rootp;
previous = NULL;

while( current != NULL && current->value < new_value )
{
previous = current;//保存前一个节点地址
current = current->link;//指向下一个节点
}

new = (Node *)malloc( sizeof( Node ));//分配动态内存
if( new == NULL )
return FALSE;
new->value = new_value;//插入的新值存储在新节点中

//新节点插入链表
new->link = current;
if( previous == NULL )//检查是否为第一个节点
*rootp = new;
else
previous->link = new;
return TRUE;
}


对上面程序的优化:



#include <stdlib.h>
#include <stdio.h>
#define	FALSE 0
#define TRUE 1
typedef struct NODE
{
struct NODE *link;
int value;
}

int sll_insert( register Node **linkp, int new_value )//增加 register 声明,提高结果代码效率
{
register Node	*current;
register Node	*new;

while( ( current = *linkp ) != NULL && current->value < new_value )
linkp = ¤t->link;//linkp是link的地址

new = (Node *)malloc( sizeof( Node ) );
if( new == NULL )
return FALSE;
new->value = new_value;

//插入新节点到链表,而无需考虑是否是第一个节点
new->link = current;
*linkp = new;
return TRUE;
}


通过这种优化便可消除插入位置在第一个节点的特殊情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: