有序鏈表的插入函數

創建一個節點

typedef struct NODE
{
       struct NODE *link;
       int         value;
}Node;

調用有序鏈表的插入函數:

//插入到一個有序鏈表。函數的參數是一個指向鏈表根指針的指針,以及一個需要插入的新值
result=sll_insert(&root,12);

插入函數1

#include <stdlib.h>
#include <stdio.h>

#define FALSE 0
#define TRUE 1

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;
    }

	//爲新節點分配內存,並把新值存儲到新的節點中,如果內存分配失敗,函數返回FALSE
	new=(Node*)malloc(sizeof(Node));
	if(new==NULL)
	{
	   return FALSE;
	}
	new->value=new_value;

    //把新節點插入到鏈表中,並返回TRUE
	new->link=current;
	if(previous==NULL)
	{
		*rootp=new;
	}
	else
	{
		previous->link=new;
    }
     
     return TRUE;

}

插入函數2

#include <stdlib.h>
#include <stdio.h>

#define FALSE 0
#define TRUE 1

int sll_insert(register Node **linkp,int new_value)
{
	register Node *current;
	register Node *new;

        //尋找正確的插入位置,方法是按順序訪問鏈表,直到達到一個其值大於或者等於新值的節點
	while((current=*linkp)!=NULL && current->value<new_value)
	{
		linkp=&current->link;
    }

	//爲新節點分配內存,並把新值存儲到新的節點中,如果內存分配失敗,函數返回FALSE
	new=(Node*)malloc(sizeof(Node));
	if(new==NULL)
	{
	   return FALSE;
	}
	new->value=new_value;

    //把新節點插入到鏈表中,並返回TRUE
	new->link=current;
	*linkp=new;
     return TRUE;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章