zoukankan      html  css  js  c++  java
  • 数据结构——链表

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 struct node
      6 {
      7     int data;
      8     struct node *pNext;
      9 };
     10 
     11 //新建node
     12 struct node * create_node(int data)
     13 {
     14     struct node *p = (struct node *) malloc (sizeof(struct node));
     15     
     16     if(NULL == p)
     17     {
     18         printf("malloc error!.
    ");
     19         return NULL;
     20     }
     21     memset(p, 0, sizeof(struct node));
     22     p->data = data;
     23     p->pNext = NULL;
     24 
     25     return p;
     26 }
     27 
     28 //尾部插入
     29 void insert_tail(struct node *pH, struct node *newp)
     30 {
     31     struct node * p = pH;
     32     while(NULL != p->pNext)
     33     {
     34         p = p->pNext;
     35     }
     36     p->pNext = newp;
     37 }
     38 
     39 //头部插入
     40 void insert_head(struct node * pH, struct node *newp)
     41 {
     42     newp->pNext = pH->pNext;
     43     pH->pNext = newp;
     44 }
     45 
     46 //excluding header data
     47 //不能打印头结点
     48 void list_for_each_1(struct node *pH)
     49 {
     50     struct node *p = pH->pNext;
     51     printf("------------begin------------
    ");
     52     while(NULL != p->pNext)
     53     {
     54         printf("node data : %d.
    ", p->data);
     55         p = p->pNext;
     56     }
     57     printf("node data : %d.
    ", p->data);
     58     printf("------------end------------
    ");
     59 }
     60 
     61 //excluding header data version 2 simplify
     62 //不能打印头结点,版本优化
     63 void list_for_each_3(struct node *pH)
     64 {
     65     struct node *p = pH;
     66     printf("------------begin------------
    ");
     67     while(NULL != p->pNext)
     68     {
     69         p = p->pNext;
     70         printf("node data : %d.
    ", p->data);
     71     }
     72     printf("------------end------------
    ");
     73 }
     74 
     75 //including header data
     76 //能打印头结点
     77 int list_for_each_2(struct node *pH)
     78 {
     79     struct node *p = pH;
     80     printf("------------begin------------
    ");
     81     if(NULL == p)
     82     {
     83         printf("nothing.
    ");
     84         return -1;
     85     }
     86     while(NULL != p->pNext)
     87     {
     88         printf("node data : %d.
    ", p->data);
     89         p = p->pNext;
     90     }
     91     printf("node data : %d.
    ", p->data);
     92     printf("------------end------------
    ");
     93     return 0;
     94 }
     95 
     96 //can not delete header node data
     97 //不能删除头结点
     98 int delete_node(struct node * pH, int data)
     99 {
    100     struct node *p = pH;
    101     struct node *pPrev = NULL;
    102     while(NULL != p->pNext)
    103     {
    104         pPrev = p;
    105         p = p->pNext;
    106         if(p->data == data)
    107         {
    108             if(NULL == p->pNext)
    109             {
    110                 pPrev->pNext = NULL;
    111                 free(p);
    112             }
    113             else
    114             {
    115                 pPrev->pNext = p->pNext;
    116                 free(p);
    117             }
    118             return 0;
    119         }
    120     }
    121     printf("no node deleted.
    ");
    122     return -1;
    123 }
    124 
    125 //can delete all node including the tail node and header node
    126 //能删除头结点和尾节点
    127 struct node * delete_node_2(struct node * pH, int data)
    128 {
    129     struct node *p = pH;
    130     struct node *pPrev = NULL;
    131     pPrev = p;
    132     while(NULL != p) //traserval to tail
    133     {
    134         if(p->data == data)
    135         {
    136             //delete header node
    137             if(p->data == pH->data)
    138             {
    139                 pH = p->pNext;
    140                 free(p);
    141                 printf("node %d deleted ok.
    ",data);
    142                 return pH; //delete ok!
    143             }
    144             else
    145             {
    146                 //delete tail node
    147                 if(NULL == p->pNext)
    148                 {
    149                     pPrev->pNext = NULL;
    150                     free(p);
    151                 }
    152                 else
    153                 {
    154                     pPrev->pNext = p->pNext;
    155                     free(p);
    156                 }
    157                 printf("node %d deleted ok.
    ",data);
    158                 return pH;
    159             }
    160             printf("node %d deleted ok.
    ",data);
    161         }
    162         pPrev = p;
    163         p = p->pNext;
    164     }
    165     return pH;
    166 }
    167 
    168 
    169 int main()
    170 {
    171     struct node * pHeader = create_node(1);
    172     printf("Hello world!
    ");
    173 
    174     insert_tail(pHeader, create_node(2));
    175     insert_tail(pHeader, create_node(3));
    176     insert_head(pHeader, create_node(4));
    177     insert_head(pHeader, create_node(5));
    178     list_for_each_2(pHeader);
    179     pHeader = delete_node_2(pHeader, 3);
    180     pHeader = delete_node_2(pHeader, 2);
    181     pHeader = delete_node_2(pHeader, 5);
    182     pHeader = delete_node_2(pHeader, 4);
    183     pHeader = delete_node_2(pHeader, 1);
    184     list_for_each_2(pHeader);
    185 //    printf("1 = %d
    ",pHeader->data);
    186 //    printf("2 = %d
    ",pHeader->pNext->data);
    187 //    printf("3 = %d
    ",pHeader->pNext->pNext->data);
    188 //    printf("4 = %d
    ",pHeader->pNext->pNext->pNext->data);
    189 //    printf("5 = %d
    ",pHeader->pNext->pNext->pNext->pNext->data);
    190 
    191     return 0;
    192 }
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/9610269.html
Copyright © 2011-2022 走看看