• 双向链表插入删除


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

    typedef 
    struct node_t {
        
    int                data;
        
    struct    node_t*    prev;
        
    struct    node_t*    next;
    } node;

    node
    * init( void )
    {
        node
    * p;

        p 
    = (node *)malloc(sizeof(node));
        
    if( p == NULL ) {
            printf(
    "malloc error\n");
            
    return 0;
        }

        p
    ->prev = NULL;
        p
    ->next = NULL;
        p
    ->data = 0;

        
    return p;
    }

    /*    insert a new node after specified postion, postion 0 is available    */
    int insert_node( node* head, int pos, int data )
    {
        node
    *    p;
        node
    *    q;

        
    if ( head == NULL || pos < 0 ) {
            printf(
    "parameter error\n");
            
    return -1;
        }

        q 
    = head;
        
    while ( pos-- > 0 && q != NULL ) {
            q 
    = q->next;
        }

        
    if ( q == NULL ) {
            printf(
    "parameter error\n");
            
    return -1;
        }

        p 
    = (node *)malloc(sizeof(node));
        
    if( p == NULL ) {
            printf(
    "malloc error\n");
            
    return -1;
        }

        p
    ->prev = q;
        p
    ->next = q->next;
        p
    ->data = data;

        
    /*    Is the last node ?    */
        
    if ( q->next )
            q
    ->next->prev = p;
        q
    ->next    = p;

        
    return 0;
    }

    /*    insert a new node after specified postion    */
    int remove_node( node* head, int pos )
    {
        node
    *    q;

        
    if ( head == NULL || pos <= 0 ) {
            printf(
    "parameter error\n");
            
    return -1;
        }

        q 
    = head;
        
    while ( pos-- > 0 && q != NULL ) {
            q 
    = q->next;
        }

        
    if ( q == NULL ) {
            printf(
    "parameter error\n");
            
    return -1;
        }

        q
    ->prev->next = q->next;
        
    /*    Is the last node ?    */
        
    if ( q->next )
            q
    ->next->prev = q->prev;
        free( q );

        
    return 0;
    }

    void print_node( node* head )
    {
        node
    * p;

        p 
    = head->next;
        
    while ( p ) {
            printf(
    "%d ", p->data);
            p 
    = p->next;
        }
        printf(
    "\n");
    }

    int main( void )
    {
        node
    * head;
        
    int n = 5;

        head 
    = init();
        
    while ( n > 0 ) {
            insert_node( head, 
    0, n );
            n
    --;
        }

        print_node( head );
        insert_node( head, 
    1010);
        insert_node( head, 
    00);
        print_node( head );
        insert_node( head, 
    66);
        print_node( head );

        remove_node( head, 
    0 );
        remove_node( head, 
    10 );
        remove_node( head, 
    6 );
        print_node( head );
        remove_node( head, 
    6 );
        print_node( head );

        
    return 0;
    }

  • 相关阅读:
    Memcached 笔记与总结(5)Memcached 的普通哈希分布和一致性哈希分布
    大数据价值挖掘:聚焦商业模式探索
    微博商业数据挖掘方法
    微博商业数据挖掘方法
    如何用大数据探索市场营销实践
    如何用大数据探索市场营销实践
    数据挖掘基本任务
    数据挖掘基本任务
    医疗大数据分析深入浅出
    医疗大数据分析深入浅出
  • 原文地址:https://www.cnblogs.com/faraway/p/1243106.html
Copyright © 2020-2023  润新知