内功修繕のデータ構造---チェーン表


前の配列に続き、このページでは主にチェーンを学習し、所与の位置の値を作成、遍歴、検索、挿入を実現しました.他の操作は書きません.基本的に似ています.コードを見て、詳しい注釈があります.

  
  
  
  
  1. #include <stdio.h> 
  2. #include <malloc.h> 
  3. #include <stdlib.h> 
  4. /* 
  5.  
  6. * 
  7. */ 
  8. typedef struct Node 
  9.     int data;//  
  10.     struct Node * pNext;//  
  11. }NODE,*PNODE; 
  12.  
  13.  
  14. /** 
  15.  
  16. * @return PNODE  
  17. * 
  18. */ 
  19. PNODE create(){ 
  20.     int length;//  
  21.     printf("  length = "); 
  22.     scanf("%d",&length); 
  23.     //  
  24.     PNODE pHead = (PNODE)malloc(sizeof(NODE)); 
  25.     if(NULL == pHead){ 
  26.         printf(" ");   
  27.         exit(-1); 
  28.     } 
  29.     //  
  30.     PNODE pTail = pHead;//  
  31.     pTail->pNext = NULL; 
  32.     //  
  33.     int data; 
  34.     for(int i=1;i<=length;i++){ 
  35.         // length  
  36.         PNODE pNode = (PNODE)malloc(sizeof(NODE)); 
  37.         if(NULL == pNode){ 
  38.             printf(" %d ",i); 
  39.             exit(-1); 
  40.         } 
  41.         printf(" %d :",i); 
  42.         scanf("%d",&data); 
  43.         pNode->data = data; 
  44.         pNode->pNext = NULL; 
  45.         pTail->pNext = pNode;// ,  
  46.         pTail = pNode;//  
  47.     } 
  48.     return pHead; 
  49.  
  50.  
  51. /** 
  52.  
  53. * @param PNODE pHead 
  54. */ 
  55. void traverse(PNODE pHead){ 
  56.     if(NULL == pHead->pNext){ 
  57.         printf(" "); 
  58.         exit(-1); 
  59.     } 
  60.     PNODE cNode = pHead->pNext;//  
  61.     int i = 1;//  
  62.     while(NULL != cNode){//  
  63.         printf(" %d :%d
    "
    ,i,cNode->data); 
  64.         cNode = cNode->pNext;//  
  65.         i ++; 
  66.     } 
  67.     return
  68.  
  69. /** 
  70.  
  71. * @param PNODE pHead 
  72. * @param int pos 
  73. * @return int 
  74. */ 
  75. int get(PNODE pHead,int pos){ 
  76.     if(NULL == pHead->pNext){ 
  77.         printf(" "); 
  78.         exit(-1); 
  79.     } 
  80.     PNODE cNode = pHead->pNext;//  
  81.     int i = 1;//  
  82.     while(NULL != cNode && i < pos){// pos  
  83.         cNode = cNode->pNext; 
  84.         i++; 
  85.     } 
  86.     if(NULL == cNode || i > pos){ 
  87.         printf(" %d ",pos); 
  88.         exit(-1); 
  89.     } 
  90.     return cNode->data; 
  91.  
  92. /** 
  93.  
  94. * @param PNODE pHead 
  95. * @param int pos 
  96. * @param PNODE pNode 
  97. */ 
  98. void insert(PNODE pHead,int pos,PNODE pNode){ 
  99.     PNODE cNode = pHead->pNext;//  
  100.     int i = 1;//  
  101.     while(NULL != cNode && i < pos){// pos  
  102.         cNode = cNode->pNext; 
  103.         i++; 
  104.     } 
  105.     if(NULL == cNode || i > pos){ 
  106.         printf(" %d
    "
    ,pos); 
  107.         exit(-1); 
  108.     } 
  109.     if(NULL == cNode->pNext){// pos ,  
  110.         cNode->pNext = pNode; 
  111.         return
  112.     } 
  113.     pNode->pNext = cNode->pNext;//  
  114.     cNode->pNext = pNode; 
  115.     return
  116.  
  117. void main(){ 
  118.     PNODE  pHead = NULL;//  
  119.     pHead = create();//  
  120.     traverse(pHead);//  
  121.     int data = get(pHead,2);// 2  
  122.     printf(" %d
    "
    ,data); 
  123.     //  
  124.     NODE node; 
  125.     node.data = 100; 
  126.     node.pNext = NULL; 
  127.     insert(pHead,2,&node); 
  128.     traverse(pHead);