データ構造解析の―順序表


くだらないことはあまり言わないし、話す時間もない.今年6月まではデータ構造に重点を置いていた.
コードを詳しく見ると便利です.
コードは個人的にノックしましたが、間違いがあれば、ご指摘ください.
 

  
  
  
  
  1. #include<iostream>  
  2. #define MaxSize 10  
  3. #define Increasment 5  
  4. using namespace std;  
  5.  
  6. typedef struct{        //  
  7. int *elem;  
  8. int length;  
  9. int ListSize;  
  10. }SqList;    
  11.  
  12. void InitList(SqList *L);                        //  
  13. void InsertList(SqList *L,int Pos,int elem);    // L Pos elem  
  14. void Print(SqList *L);                          // L ,  
  15. void VirValue(SqList *L, int sPos, int ePos);   // L StartPos EndPos 0  
  16. void Delete(SqList *L,int Pos);                 // L pos  
  17.  
  18. int main()  
  19. {  
  20.     int iPos,iElem;  
  21.     int Confirm;  
  22.     SqList L;                                     
  23.     /*postfix-expression . identifier  
  24.       postfix-expression represents a value of struct or union type,   
  25.      postfix-expression –> identifier  
  26.      postfix-expression represents a pointer to a structure or union,  
  27.      */ 
  28.     InitList( &L );   
  29.     cout << "Try to insert or delete an element?" << endl  
  30.          << "1 for insert an element" << endl  
  31.          << "2 for delete an element" << endl  
  32.          << "CTRL+D for quit " << endl;  
  33.     while(  cin >> Confirm )                            //ctrl + d  , while  
  34.     {  
  35.         switch(Confirm)  
  36.         {  
  37.         case 1: {  
  38.                 cout << "Input Position and Element" << endl;  
  39.                 cin >> iPos >> iElem;  
  40.                 InsertList(&L, iPos, iElem);  
  41.                 cout << "Sequence\tMEM_addr\t\tSize\t\tElement" << endl;     
  42.                 Print( &L );  
  43.                 }  
  44.                 break;  
  45.         case 2: {  
  46.                 cout << "Input Position" << endl;  
  47.                 cin >> iPos;  
  48.                 Delete(&L,iPos);  
  49.                 cout << "Sequence\tMEM_addr\t\tSize\t\tElement" << endl;     
  50.                 Print( &L );  
  51.                 }  
  52.                 break;  
  53.         default:  
  54.             cout << "Non-existed options!" << endl;  
  55.                 break;  
  56.         }  
  57.      }  
  58.     cout << "Cancel,Current Sequence is bellow" << endl;    
  59.     cout << "Sequence\tMEM_addr\t\tSize\t\tElement" << endl;     
  60.     Print( &L );  
  61.     return 0;    
  62. }  
  63.  
  64. void InitList(SqList *L)  
  65. {  
  66.      L -> elem = (int *)malloc(MaxSize * sizeof(int));// , L elem  
  67.                                                       // (int *), void  
  68.                                                       // NULL  
  69.      if(!L -> elem)  
  70.      {   
  71.            cout << "Initialized failed" << endl;  
  72.            exit(0);  
  73.      }  
  74.      else   
  75.            cout << "Initialized successfully" << endl;  
  76.      cout << "Sequence\tMEM_addr\t\tSize\t\tElement" << endl;  
  77.      L -> length = 0;  
  78.      L -> ListSize = MaxSize;  
  79.      VirValue( L, 0, L->ListSize);                   // void VirValue(SqList *L, int sPos, int ePos);  
  80.                                                      //  L   *L  main , InitList  
  81.      Print( L );  
  82. }  
  83.  
  84. void InsertList(SqList *L,int Pos,int elem)  
  85. {  
  86.     int *base, *insertPtr, *p;  
  87.     if (Pos < 1 || Pos > L -> length + 1)   
  88.        {  
  89.        cout << "Error:Position is illegal!" << endl;  
  90.       // exit(0);                                        // return , , exit ,  
  91.                                                          // main while 。disgusting  
  92.        }  
  93.     if (L->length >= L->ListSize)  
  94.     {  
  95.         base = (int *)realloc( L->elem,(L->ListSize + Increasment) * sizeof(int) );  //realloc malloc   
  96.         L->elem = base;  
  97.         L->ListSize += Increasment;  
  98.     }  
  99.     VirValue( L, L->length, L->ListSize);             //  
  100.     insertPtr = &(L->elem[Pos-1]);  
  101.     for (p = &( L->elem[L->length-1] ); p >= insertPtr; p--)  // ,  
  102.     {  
  103.         *(p + 1) = *p;  
  104.     }     
  105.     *insertPtr = elem;  
  106.     L -> length++;  
  107. }  
  108.  
  109. void Delete(SqList *L,int Pos)  
  110. {  
  111.      if(Pos < 1 || Pos > L->length)   
  112.      {  
  113.          cout << "Error:Position is illegal!" << endl;  
  114.      }  
  115.      for (Pos; Pos < L->length; ++Pos)  
  116.      {  
  117.          L->elem[Pos-1] = L->elem[Pos];             // 。  
  118.      }    
  119.      L->elem[Pos] = 0;                              // 0    
  120.      L->length--;  
  121. }  
  122.  
  123. void Print(SqList *L)  
  124. {  
  125.      for (int i = 0; i < L -> ListSize; i++)  
  126.      {  
  127.          cout << i+1 << "\t\t" << &(L -> elem[i]) << "\t\t" //L -> elem ,  
  128.                                                           //  L -> elem[i] i , &(L -> elem[i])  
  129.               << sizeof(L -> elem[i]) << "\t\t"         // , ,int ( )   
  130.               << L -> elem[i] << endl;  
  131.      }  
  132. }  
  133.  
  134. void VirValue(SqList *L, int sPos, int ePos)   
  135. {  
  136.     for (int i = sPos; i < ePos; i++)  
  137.     {  
  138.         L->elem[i] = 0;  
  139.     }  
  140. }  
  141.  
  142. /*  
  143. 1.return exit  
  144.     exit() return()  
  145.  
  146.    main return (0); 。   
  147.  
  148.    void void main() 。   
  149.  
  150.   exit() , 。   
  151.  
  152.    exit main main void , exit ,exit(1) return (1)   
  153.  
  154. #include <iostream>    
  155. #include <string>    
  156. using namespace std;    
  157.     
  158. int main()      
  159. {    
  160.     exit (1);// return (1);    
  161.  
  162. 2.realloc malloc  
  163.  
  164. C :malloc,calloc,realloc,free 。   
  165. malloc calloc 1 n :   
  166. malloc ( *)malloc(size): “size” , 。   
  167. calloc ( *)calloc(n,size): n “size” , 。   
  168. realloc ( *)realloc(*ptr,size): ptr size。   
  169. free free(void*ptr): ptr 。   
  170. C++ new/delete 。   
  171.  
  172. realloc  
  173.     1. realloc , NULL  
  174.   2. realloc , ,  
  175.   3.  ,realloc = + ,realloc ;  ,realloc , , free ,realloc  
  176.   4.  size 0, free()  
  177.   5.  realloc malloc(), calloc(),  realloc()  
  178.   6. realloc , malloc。  
  179. */ 

 
本文は「From quantity to quality」ブログから、転載は作者に連絡してください.