zoukankan      html  css  js  c++  java
  • 【线性表】 LineTable

      1 #include<iostream>
      2 #include<windows.h>
      3 
      4 
      5 using namespace std;
      6 
      7 
      8 #define MAX 3
      9 
     10 
     11 typedef struct _DATA_
     12 {
     13     int iAge;
     14     char szName[20];
     15 
     16 
     17 }Data,*pData;
     18 
     19 
     20 typedef struct _LINETABLE_
     21 {
     22 
     23     pData  pDataTemp;
     24 
     25     int iMax;
     26     int iSize;
     27 }LineTable, *pLineTable;
     28 
     29 
     30 int Compare(LineTable LineTableTemp, Data DataTemp);
     31 
     32 class CLineTable
     33 {
     34 
     35 public:
     36     CLineTable()
     37     {
     38 
     39     }
     40     ~CLineTable()
     41     {
     42 
     43     }
     44 
     45 
     46     bool IsExist(LineTable& LineTableTemp);
     47     void InputData(LineTable& LineTableTemp,Data DataTemp)
     48     {
     49 
     50         LineTableTemp.pDataTemp[LineTableTemp.iSize] = DataTemp;
     51 
     52         LineTableTemp.iSize++;
     53     }
     54     bool InitLineTable(LineTable& LineTableTemp);
     55     void DestroyLineTable(LineTable& LineTableTemp);
     56     bool ClearLineTable(LineTable& LineTableTemp);
     57     bool IsEmpty(LineTable& LineTableTemp);
     58     bool GetLength(LineTable& LineTableTemp, DWORD& dwLength);
     59     bool GetElement(LineTable& LineTableTemp, pData pDataTemp, DWORD dwIndex);
     60     bool LocateElement(LineTable& LineTableTemp, Data DataTemp,
     61         int& iIndex, int Compare(LineTable,Data));
     62     bool PreElement(LineTable& LineTableTemp, Data DataTemp,
     63         Data& DataPre, int Compare(LineTable LineTableTemp, Data DataTemp));
     64 
     65     bool NextElement(LineTable& LineTableTemp, Data DataTemp,
     66         Data& DataNext, int Compare(LineTable, Data));
     67 
     68     bool TravelLineTable(LineTable& LineTableTemp)
     69     {
     70         if(IsExist(LineTableTemp))
     71         {
     72             int i = 0;
     73             for(i=0;i<LineTableTemp.iSize;i++)
     74             {
     75                 cout<<LineTableTemp.pDataTemp[i].szName<<" "
     76                     <<LineTableTemp.pDataTemp[i].iAge<<endl;
     77             }
     78             return true;
     79         }
     80 
     81         return false;
     82     }
     83 
     84     bool InsertData(LineTable& LineTableTemp,
     85         Data DataTemp, Data DataNew);
     86 
     87     bool DeleteData(LineTable& LineTableTemp,
     88         Data DataTemp, Data& DataDel);
     89 };
     90 
     91 
     92 
     93 
     94 bool CLineTable::IsExist(LineTable& LineTableTemp)
     95 {
     96     if(LineTableTemp.pDataTemp != NULL)
     97     {
     98         return true;
     99     }
    100 
    101     return false;
    102 }
    103 
    104 
    105 
    106 bool CLineTable::InitLineTable(LineTable& LineTableTemp)
    107 {
    108 
    109     LineTableTemp.iMax = MAX;
    110 
    111     LineTableTemp.pDataTemp = new Data[LineTableTemp.iMax];
    112 
    113     if(LineTableTemp.pDataTemp == NULL)
    114     {
    115         return false;
    116     }
    117 
    118     memset(LineTableTemp.pDataTemp,0,
    119         sizeof(Data)*LineTableTemp.iMax);
    120 
    121     LineTableTemp.iSize = 0;
    122 
    123 
    124     return true;
    125 }
    126 
    127 
    128 void CLineTable::DestroyLineTable(LineTable& LineTableTemp)
    129 {
    130 
    131     if(LineTableTemp.pDataTemp != NULL)
    132     {
    133         delete LineTableTemp.pDataTemp;
    134     }
    135     LineTableTemp.iMax = 0;
    136     LineTableTemp.iSize = 0;
    137     LineTableTemp.pDataTemp = NULL;        //这个一定要赋为空
    138 }    
    139 
    140 
    141 
    142 bool CLineTable::ClearLineTable(LineTable& LineTableTemp)
    143 {
    144     if(IsExist(LineTableTemp))
    145     {
    146         memset(LineTableTemp.pDataTemp,0,
    147             sizeof(Data)*LineTableTemp.iSize);
    148         
    149         
    150         LineTableTemp.iSize = 0;
    151 
    152         return true;
    153     }
    154 
    155 
    156 
    157     return false;
    158 }
    159 
    160 
    161 bool CLineTable::IsEmpty(LineTable& LineTableTemp)
    162 {
    163     if(IsExist(LineTableTemp))
    164     {    
    165         if(LineTableTemp.iSize == 0)
    166         {
    167             return true;
    168         }
    169     }
    170 
    171     return false;
    172 }
    173 
    174 
    175 bool CLineTable::GetLength(LineTable& LineTableTemp, DWORD& dwLength)
    176 {
    177     if(IsExist(LineTableTemp))
    178     {
    179         dwLength = LineTableTemp.iSize;
    180         
    181         return true;
    182     }
    183 
    184     return false;
    185 }
    186 
    187 
    188 
    189 
    190 
    191 
    192 bool CLineTable::GetElement(LineTable& LineTableTemp, pData pDataTemp, DWORD dwIndex)
    193 {
    194     if(IsExist(LineTableTemp) && 1<=dwIndex 
    195         && dwIndex<=LineTableTemp.iSize)
    196     {
    197         *pDataTemp = LineTableTemp.pDataTemp[--dwIndex];
    198 
    199         return true;
    200     }
    201 
    202     return false;
    203 }
    204 
    205 bool CLineTable::LocateElement(LineTable& LineTableTemp, 
    206                                Data DataTemp,
    207                                int& iIndex, 
    208         int Compare(LineTable,Data))
    209 {
    210 
    211     if(IsExist(LineTableTemp))
    212     {
    213         iIndex = Compare(LineTableTemp, DataTemp);
    214 
    215         if(iIndex == -1)
    216         {
    217             return false;
    218         }
    219 
    220         return true;
    221     }
    222 
    223     return false;
    224 }
    225 
    226 
    227 bool CLineTable::PreElement(LineTable& LineTableTemp, Data DataTemp,
    228         Data& DataPre, int Compare(LineTable, Data))
    229 {
    230     int iIndex = 0;
    231 
    232     if(IsExist(LineTableTemp))
    233     {
    234         if(LocateElement(LineTableTemp,DataTemp,iIndex,Compare))
    235         {
    236             iIndex--;
    237             if(iIndex>0)
    238             {
    239                 DataPre = LineTableTemp.pDataTemp[iIndex-1];
    240             
    241                 return true;
    242             }
    243         }
    244 
    245         cout<<"No Precursor."<<endl;
    246         return false;
    247     }
    248     return false;
    249 }
    250 
    251 
    252 bool CLineTable::NextElement(LineTable& LineTableTemp, Data DataTemp,
    253         Data& DataNext, int Compare(LineTable, Data))
    254 {
    255     int iIndex = 0;
    256 
    257     if(IsExist(LineTableTemp))
    258     {
    259         if(LocateElement(LineTableTemp,DataTemp,iIndex,Compare))
    260         {
    261             iIndex--;
    262             if(iIndex<LineTableTemp.iSize-1)
    263             {
    264                 DataNext = LineTableTemp.pDataTemp[iIndex+1];
    265             
    266                 return true;
    267             }
    268         }
    269 
    270         cout<<"No Successor."<<endl;
    271         return false;
    272     }
    273     return false;
    274 
    275 
    276 }
    277 
    278 
    279 bool CLineTable::InsertData(LineTable& LineTableTemp,
    280         Data DataTemp, Data DataNew)
    281 {
    282     int i = 0;
    283     int iIndex = 0;
    284 
    285     if(LineTableTemp.iSize>=LineTableTemp.iMax)
    286     {
    287         LineTableTemp.pDataTemp = 
    288             (pData)realloc(LineTableTemp.pDataTemp,
    289             sizeof(Data)*(LineTableTemp.iMax+MAX));
    290 
    291 
    292         cout<<endl<<"Allocate"<<endl;
    293 
    294         if(LineTableTemp.pDataTemp == NULL)
    295         {
    296             return false;
    297         }
    298         else
    299         {
    300             LineTableTemp.iMax+=MAX;
    301         }
    302 
    303     }
    304 
    305     if(LocateElement(LineTableTemp, DataTemp, iIndex, Compare))
    306     {
    307         iIndex--;
    308         for(i=LineTableTemp.iSize-1;i>=iIndex;i--)
    309         {
    310             LineTableTemp.pDataTemp[i+1] = 
    311                 LineTableTemp.pDataTemp[i];
    312         }
    313 
    314 
    315         LineTableTemp.pDataTemp[iIndex] = DataNew;
    316     
    317         LineTableTemp.iSize++;
    318     
    319         return true;
    320     }
    321 }
    322 
    323 
    324 
    325 bool CLineTable::DeleteData(LineTable& LineTableTemp,
    326         Data DataTemp, Data& DataDel)
    327 {
    328     int i = 0;
    329     int iIndex = 0;
    330     if(LocateElement(LineTableTemp, DataTemp, iIndex, Compare))
    331     {
    332         iIndex--;
    333         DataDel = LineTableTemp.pDataTemp[iIndex];
    334 
    335         for(i=iIndex;i<LineTableTemp.iSize;i++)
    336         {
    337             LineTableTemp.pDataTemp[i] = 
    338                 LineTableTemp.pDataTemp[i+1];
    339         }
    340 
    341         LineTableTemp.iSize--;
    342         
    343         return true;
    344     }
    345 }
    346 
    347 
    348 int main()
    349 {
    350     
    351     CLineTable CLineTableObject;
    352 
    353     LineTable LineTableTemp = {0};
    354 
    355     DWORD dwLength = 0;
    356 
    357     CLineTableObject.InitLineTable(LineTableTemp);
    358 
    359 
    360     Data DataTemp = {0};
    361 
    362     int iIndex = 0;
    363     Data DataNew = {0};
    364     Data DataDel = {0};
    365     int i = 0;
    366     for(i=0;i<3;i++)
    367     {
    368         cout<<"Input Name and Age:"<<endl;
    369 
    370         cin>>DataTemp.szName;
    371         cin>>DataTemp.iAge;
    372 
    373         CLineTableObject.InputData(LineTableTemp,DataTemp);        
    374     }
    375     if (!CLineTableObject.IsEmpty(LineTableTemp))
    376     {
    377         cout<<endl<<"LineTable have Data."<<endl;
    378     }
    379 
    380 
    381 
    382     if (CLineTableObject.GetLength(LineTableTemp,dwLength))
    383     {
    384         cout<<"LineTable's Size: "<<dwLength<<endl<<endl;
    385     }
    386 
    387 
    388     cout<<"Input Index:"<<endl;
    389 
    390 
    391     cin>>iIndex;
    392 
    393 
    394     if(CLineTableObject.GetElement(LineTableTemp,&DataNew,
    395         iIndex))
    396     {
    397 
    398         cout<<DataNew.szName<<"  "<<DataNew.iAge<<endl;
    399     }
    400     else
    401     {
    402         cout<<"Position Error."<<endl;
    403     }
    404 
    405 
    406     cout<<endl<<"Input Data To Find:"<<endl;
    407 
    408     cin>>DataTemp.szName;
    409     cin>>DataTemp.iAge;
    410 
    411     if (CLineTableObject.LocateElement(LineTableTemp,DataTemp,
    412         iIndex ,Compare))
    413     {
    414 
    415         if (iIndex==-1)
    416         {
    417             cout<<"No Person"<<endl;
    418         }
    419         cout<<"Index:"<<iIndex<<endl;
    420     }
    421     else
    422     {
    423         cout<<"No Data."<<endl;
    424     }
    425 
    426     cout<<endl<<"Input Data To Get Pre:"<<endl;
    427     
    428     cin>>DataTemp.szName;
    429     cin>>DataTemp.iAge;
    430 
    431 
    432     if (CLineTableObject.PreElement(LineTableTemp,
    433         DataTemp,DataNew,Compare))
    434     {
    435 
    436         cout<<DataNew.szName<<"  "<<DataNew.iAge<<endl;
    437 
    438     }
    439 
    440 
    441     cout<<endl<<"Input Data To Get Next:"<<endl;
    442     
    443     cin>>DataTemp.szName;
    444     cin>>DataTemp.iAge;
    445     
    446     
    447     if (CLineTableObject.NextElement(LineTableTemp,
    448         DataTemp,DataNew,Compare))
    449     {
    450         
    451         cout<<DataNew.szName<<"  "<<DataNew.iAge<<endl;
    452         
    453     }
    454 
    455     cout<<"Input Person Position to Insert:"<<endl;
    456 
    457     cin>>DataTemp.szName;
    458     cin>>DataTemp.iAge;
    459 
    460     cout<<"Input New Data"<<endl;
    461 
    462     cin>>DataNew.szName;
    463     cin>>DataNew.iAge;
    464 
    465     if(CLineTableObject.InsertData(LineTableTemp, 
    466         DataTemp, DataNew))
    467     {
    468         CLineTableObject.TravelLineTable(LineTableTemp);
    469 
    470     }
    471 
    472     cout<<"Input Person Position to Delete:"<<endl;
    473 
    474     cin>>DataTemp.szName;
    475     cin>>DataTemp.iAge;
    476 
    477     if(CLineTableObject.DeleteData(LineTableTemp,
    478         DataTemp, DataDel))
    479     {
    480         cout<<endl<<DataDel.szName
    481             <<" "<<DataDel.iAge<<" is Deleted."<<endl<<endl;
    482 
    483         CLineTableObject.TravelLineTable(LineTableTemp);
    484 
    485         
    486     }
    487     return 0;
    488 }
    489 
    490 
    491 
    492 
    493 int Compare(LineTable LineTableTemp, Data DataTemp)
    494 {
    495     int i = 0;
    496     for(i=0;i<LineTableTemp.iSize;i++)
    497     {
    498         if(strcmp(LineTableTemp.pDataTemp[i].szName,DataTemp.szName) == 0
    499             && LineTableTemp.pDataTemp[i].iAge == DataTemp.iAge)
    500         {
    501 
    502             return i+1;
    503         }
    504             
    505     }
    506 
    507     return -1;
    508 }
  • 相关阅读:
    [Python] Read and Parse Files in Python
    [React] Write Compound Components
    [Python] Reuse Code in Multiple Projects with Python Modules
    [Parcel] Bundle a React App with Parcel
    [Javascript] Specify this using .call() or .apply()
    [Javascript] this in Function Calls
    [Python] Create a Log for your Python application
    [Python] Create Unique Unordered Collections in Python with Set
    [Python] Manipulate Data with Dictionaries in Python
    SVN:常用命令
  • 原文地址:https://www.cnblogs.com/Lee-geeker/p/3335798.html
Copyright © 2011-2022 走看看