<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一 線性表的順序存儲之動態數組

      線性表的順序存儲

      一 丶定義

        線性表(linear list)數據結構的一種,一個線性表是n個具有相同特性的數據元素的有限序列.

      線性表的相鄰元素之間存在著序偶關系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一個順序表,

      則表中ai-1領先于ai,ai領先于ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接后繼元素。

      當i=1,2,…,n-1時,ai有且僅有一個直接后繼,當i=2,3,…,n時,ai有且僅有一個直接前驅 。

      二丶線性表順序存儲各種操作

      定義動態數組結構:

      1 #define CARRAY_INIT_CAPACITY 5 //初識容量
      2 #define CARRAY_INCREAMENT_CAPACITY 10 //增量
      3 
      4 typedef struct CustomArray
      5 {
      6     void** pAddr;    //數組元素存放地址
      7     int size;    //數組元素個數
      8     int capacity;        //數組容量
      9 }CArray;

       

      動態數組各種操作:

      //遍歷函數指針
      typedef void(*PRINTCARRAY)(void*);
      
      //比較函數指針
      typedef int(*COMPARE)(void*, void*);
      
      //初始化
      CArray* Init_CArray();
      
      //尾插
      void Insert_CArray(CArray* arr,void* e);
      
      //遍歷
      void Print_CArray(CArray* arr, PRINTCARRAY pCarry);
      
      //查找
      int Find_CArray(CArray* arr, void* e, COMPARE compare);
      
      //按位置刪除
      void RemoveByPos(CArray* arr, int pos);
      
      //按值刪除
      void RemoveByValue(CArray* arr, void* e, COMPARE compare);
      
      //銷毀
      void Destory_CArray(CArray* arr);

      動態數組各種操作的實現:

       1 //初始化
       2 CArray* Init_CArray()
       3 {
       4     CArray* arr = (CArray*)malloc(sizeof(CArray));
       5     arr->size = 0;
       6     arr->capacity = CARRAY_INIT_CAPACITY;
       7     arr->pAddr = malloc(sizeof(void*)*arr->capacity);
       8     return arr;
       9 }
      10 
      11 //尾插
      12 void Insert_CArray(CArray* arr, void* e)
      13 {
      14     if (arr->size >= arr->capacity)
      15     {
      16         //建立新空間并拷貝原空間數據
      17         void* newbase = realloc(arr->pAddr, (arr->capacity + CARRAY_INCREAMENT_CAPACITY)*sizeof(void*));
      18         if (newbase == NULL)
      19             exit(-1);
      20         //更新元素地址和數組容量
      21         arr->pAddr = newbase;
      22         arr->capacity += CARRAY_INCREAMENT_CAPACITY;
      23     }
      24     //尾插法插入數據
      25     arr->pAddr[arr->size] = e;
      26     arr->size++;
      27     }
      28 
      29 //遍歷
      30 void Print_CArray(CArray* arr, PRINTCARRAY pCarry)
      31 {
      32     if (arr == NULL)
      33         return;
      34     for (int i = 0; i < arr->size; i++)
      35     {
      36         pCarry(arr->pAddr[i]);
      37     }
      38     printf("\n");
      39 }
      40 
      41 //查找
      42 int Find_CArray(CArray* arr, void* e, COMPARE compare)
      43 {
      44     if (arr == NULL)
      45         return -1;
      46     int pos = -1;
      47     for (int i = 0; i < arr->size; i++)
      48     {
      49         if (compare(arr->pAddr[i], e)==0)
      50         {
      51             pos = i;
      52             break;
      53         }
      54     }
      55     return pos;
      56 }
      57 
      58 //按位置刪除
      59 void RemoveByPos(CArray* arr, int pos)
      60 {
      61     if (arr == NULL)
      62         return;
      63     if (pos<0 || pos>arr->size)
      64         return;
      65     for (int i = pos; i < arr->size; i++)
      66         arr->pAddr[i] = arr->pAddr[i + 1];
      67     arr->size--;
      68 }
      69 
      70 //按值刪除
      71 void RemoveByValue(CArray* arr, void* e, COMPARE compare)
      72 {
      73     if (arr == NULL)
      74         return;
      75     int pos = Find_CArray(arr, e, compare);
      76     RemoveByPos(arr, pos);
      77 }
      78 
      79 //銷毀
      80 void Destory_CArray(CArray* arr)
      81 {
      82     if (arr == NULL)
      83         return;
      84     if (arr->pAddr != NULL)
      85     {
      86         free(arr->pAddr);
      87         arr->pAddr = NULL;
      88     }
      89     free(arr);
      90     arr->pAddr = NULL;
      91 }

      動態數組的測試:

      #include <string.h>
      typedef struct Person
      {
          char name[64];
          int age;
      }Person;
      
      void MyPrint(void* data)
      {
          Person* p = (Person*)data;
          printf("Name:%s Age:%d\n", p->name, p->age);
      }
      
      int MyCompare(void* data1, void* data2)
      {
          Person* p1 = (Person*)data1;
          Person* p2 = (Person*)data2;
          return strcmp(p1->name, p2->name) && p1->age == p2->age == 0;    
      }
      
      int main()
      {
          //初始化
          CArray* arr = Init_CArray();    
          printf("元素個數:%d\n", arr->size);
          printf("數組容量:%d\n", arr->capacity);
          //數據
          Person p1 = { "李偉",17 };
          Person p2 = { "張浩",21 };
          Person p3 = { "劉樂",22 };
          Person p4 = { "劉雯",26 };
          Person p5 = { "張薇",23 };
          Person p6 = { "馬可",20 };
          Person p7 = { "琉璃",28 };
          Person p8 = { "張峰",30 };
          Person p9 = { "張磊",10 };
          Insert_CArray(arr, &p1);
          Insert_CArray(arr, &p2);
          Insert_CArray(arr, &p3);
          Insert_CArray(arr, &p4);
          Insert_CArray(arr, &p5);
          Insert_CArray(arr, &p6);
          Insert_CArray(arr, &p7);
          Insert_CArray(arr, &p8);
          printf("-----添加數據后------\n");
          printf("元素個數:%d\n", arr->size);
          printf("數組容量:%d\n", arr->capacity);
          printf("----遍歷數組元素------\n");
          Print_CArray(arr, MyPrint);
          printf("----查找------\n");
          int pos = Find_CArray(arr, &p9, MyCompare);
          printf("POS:%d\n", pos);
          printf("-----刪除----\n");
          RemoveByPos(arr, 2);
          RemoveByValue(arr, &p8, MyCompare);
          Print_CArray(arr, MyPrint);
          Destory_CArray(arr);
          system("pause");
          return 0;
      }

       

      posted @ 2020-05-09 10:36  mcf8293  閱讀(198)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人免费无码大片a毛片| 国产真实露脸乱子伦原著| 色综合天天综合天天更新| 腾冲县| 亚洲国产综合一区二区精品| 美女裸体黄网站18禁止免费下载 | 亚欧洲乱码视频一二三区| AV教师一区高清| 91产精品无码无套在线| 国产乱对白刺激视频| 蜜臀久久99精品久久久久久| 你懂的视频在线一区二区| 万年县| 亚洲成色精品一二三区| 亚洲成人网在线观看| 国产精品中文第一字幕| 午夜爽爽爽男女污污污网站| 人妻少妇精品系列一区二区| 一区二区三区午夜无码视频| 安丘市| 国产美女高潮流白浆视频| 亚洲伊人久久综合成人| 无码天堂亚洲国产AV| 国产91精品调教在线播放| 久久精品国产99久久久古代| 国产偷国产偷亚洲高清午夜| 亚洲国产超清无码专区| 国产精品一区在线蜜臀| 国产精品国产三级国产专| 精品偷拍被偷拍在线观看| 亚洲老熟女一区二区三区| 久久香蕉国产线看观看精品yw| 成人精品一区二区三区四| 精品偷拍一区二区三区| 国产成人久久精品流白浆| 免费久久人人香蕉av| 精品三级在线| 国产成人一卡2卡3卡四卡视频| 白嫩少妇无套内谢视频| 亚洲a∨无码一区二区三区| 亚洲精品午夜精品|