插入雙鏈表的詳細解析
#include <stdlib.h> #include <assert.h> #include <stdio.h>
typedef struct NODE { struct NODE *f; struct NODE *b; int value;
}Node;
int dll_insert( register Node *rootp, int value) { register Node *this; register Node *next; register Node *newnode;
for( this = rootp; ( next = this -> f) != NULL; this = next) { if( next -> value == value) return 0; if( next -> value > value) break; }
newnode = ( Node* )malloc( sizeof( Node )); if( newnode == NULL) return -1; newnode -> value = value;
newnode -> f = next; this -> f = newnode;
if( this != rootp) newnode -> b = this; else newnode -> b = NULL;
if( next != NULL) next -> b = newnode; else rootp -> b = newnode;
return 1; }
int main() { Node* root; root = ( Node* )malloc( sizeof( Node ) );//建立一個根指標 root -> f = NULL;//root裡面f中的內容為NULL root -> b = NULL;//root裡面b中的內容為NULL dll_insert( root, 3 );//在一個空的雙鏈表中插入3 dll_insert( root, 5 );//在雙鏈表中插入5
printf( "%d\n", root -> f -> value ); printf( "%d\n", root -> f -> f -> value ); printf( "%d\n", root -> b -> value ); printf( "%d\n", root -> b -> b -> value );
return 0;
}