zoukankan      html  css  js  c++  java
  • C和指针笔记——链表的研究和改善

    1 //code by zzlpp && code for link_list training
    2 typedef struct Node
    3 {
    4     int value;
    5     struct Node *link;
    6 }Node;
    7 
    8 //头文件只包含节点的声明 文
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <malloc.h>
     4 #include "node.h"
     5 
     6 Node*creatnode(int value);
     7 void insertnode( Node **pointer,int value );
     8 
     9 void main()
    10 {
    11     Node *p=creatnode(5);
    12     Node **pointer=&p;
    13     insertnode(pointer,3);
    14     do
    15     {
    16         printf("%d	",p->value);
    17         p=p->link;
    18     }while( p!=NULL );
    19     printf("
    ");
    20     system("pause");
    21 }
    22 Node *creatnode(int value)
    23 {
    24     Node *root;
    25     root=( Node *)malloc( sizeof(Node) );
    26     if (root==NULL)
    27     {
    28         free( root );
    29         printf("error
    ");
    30         exit(EXIT_FAILURE);
    31     }
    32     root->value=value;
    33     root->link=NULL;
    34     return root;
    35 }
    36 void insertnode( Node **pointer,int value )
    37 {
    38     Node *current;
    39     Node *previous;
    40 
    41     previous=NULL;
    42     current=*pointer;
    43 
    44     Node *newnode=( Node* )malloc( sizeof(Node) );
    45     if ( newnode==NULL )
    46     {
    47         free( newnode );
    48         printf("error
    ");
    49         exit(EXIT_FAILURE);
    50     }
    51     newnode->value=value;
    52     while ( current->value<value && current->link!=NULL )
    53     {
    54         previous=current;
    55         current=current->link;
    56     }
    57     if ( current->link==NULL )
    58     {
    59         if ( current->value<value )
    60         {
    61             current->link=newnode;
    62             newnode->link=NULL;
    63         }
    64         else
    65         {
    66             newnode->link=current;
    67             *pointer=newnode;
    68         }
    69     }
    70     else
    71     {
    72         newnode->link=current;
    73         previous->link=newnode;
    74     }
    75 }
    
    

    和原书上写的有些出入,总的来说就是要考虑到3种情况,第一种是要考虑插在链表的中间,第二种是要考虑到查到结尾,最后是要你考虑到查到开头,这三种情况缺一不可,个人觉得如此处理更为清晰一些。

    件名  “node.h”                   
  • 相关阅读:
    MySql面试题、知识汇总、牛客网SQL专题练习
    产生过拟合的原因
    《人类简史》这本烧脑书风靡全球的秘密是什么?
    厌食?暴食?试试这个 VR 新疗法
    协程、异步IO
    进程池
    进程(同步)锁
    特朗普变脸:同媒体“友好会谈”,怨媒体“死不悔改”
    多进程Queue
    redis 在 php 中的应用(事务 [ Transaction ] 篇)
  • 原文地址:https://www.cnblogs.com/zzlpp/p/4557495.html
Copyright © 2011-2022 走看看