自己整理的单链表
来源:互联网 发布:淘宝可以买保健品吗 编辑:程序博客网 时间:2024/05/17 01:40
把一个节点插入一个有序的链表中,本文进行了三次尝试。
/***********************************第一次*****************************/
#include <stdlib.h>
#include <stdio.h>
#include "sll_node.h"
#define FALSE 0
#define TURE 1
int sll_insert ( Node *current, int new_value )
{
Node *previous;
Node *new;
/*******************************寻找正确插入位置*****************/
while ( 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;
previous->link = new;
return TRUE;
}
第一个插入函数只适用于单个插入,如果插入数据过多,就会出现一个很严中的问题,那就是while循环越过链表的尾部,并对一个NULL指针进行间接操作。为了解决这个问题,我们必须对current进行检测,在执行表达式current->value之前确保它不是一个NULL指针。因此,我们进行了二次尝试(本例中在链表的起始位置也插入了节点。
/************************第二次尝试***************************/
#include <stdlib.h>
#include <stdio.h>
#include "sll_node.h"
#define FALSE 0
#define TURE 1
int sll_insert ( Node **rootp, int new_value )
{
Node *current;
Node *previous;
Node *new;
curerent = *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;
}
第二次尝试当中,用一个指向root的指针作为参数传递给函数。然后,使用间接访问,函数不仅可以获得root(指向第一个节点的指针,也就是根指针)的值。但是这种情况,把起始位置当做特殊情况进行处理的。第三次尝试将解决这个问题。
#include <stdlib.h>
#include <stdio.h>
#include "sll_node.h"
#define FALSE 0
#define TURE 1
int sll_insert ( register Node **linkp, int new_value )
{
Node *current;
Node *new;
while ( (current =*linkp) != NULL && current->value < new_value)
linkp = ¤t->link;
/******************为新节点分配内存******************/
new = ( Node *)malloc (sizeof (Node));
if ( new == NULL)
return FALSE;
new->value = new_value;
/***********************插入链表*********************************/
new->link = current;
*linkp = new;
return TRUE;
}
- 自己整理的单链表
- 自己整理的指令
- 自己整理的数据
- 自己整理的网址
- 六一儿童节,开始整理自己的blog,整理自己的心情.
- 整理一下自己的态度
- 自己整理的一些网站
- JavaScrip的类(自己整理)
- 自己整理的sql语句
- 自己整理的Oracle语句
- 整理一下自己的实习
- 自己整理的js函数库
- 自己整理的MBR数据结构
- 学会整理自己的知识
- Python基础教程(自己整理的)
- 自己整理的一批同义词
- 自己整理的KMP算法
- 自己整理的一些常用命令
- qt creater中设置应用程序图标
- 关于数据库中的无限级别设计
- Android编译环境编译Native C的模块
- 查看宏代码的具体操作方式
- BizTalk Server 2010 - 映射器(Mapper) [ 中篇 ]
- 自己整理的单链表
- jQuery对表单元素的取值和赋值操作
- java写文件比较
- 运算符重载
- XHTML总结
- 关于js setInterval setTimeout
- Pass-Muraille
- 获取当天的订单--以半小时为单位的报表
- C++构造函数 ,初始化列表