链表--结构与指针使用

单链表

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

#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 = &current->link;//linkp是link的地址

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

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

通过这种优化便可消除插入位置在第一个节点的特殊情况


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值