日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内功重修之数据结构----数组

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内功重修之数据结构----数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

畢業也有一段時間了,一直在做PHP開發,最近感覺到內功薄弱,所以是重新開始學習內功的時候了(參考郝斌數據結構視頻教程)

?動態數組的實現,本文以C語言實現一個數組功能(抽取幾個基本方法),包括初始化數組(init),添加數據到數組(append),插入數據到指定位置(insert),刪除指定位置數據(delete),取得指定位置數據(get);

首先定義一個數據類型(使用結構體)Arr:

  • struct?Arr?
  • {?
  • ????int?*?pBase;?//存儲的是數組第一個元素的地址?
  • ????int?len;?//數組所能容納的最大元素的個數?
  • ????int?cnt;?//當前數組有效元素的個數?
  • };?
  • 以下的操作都是針對該數據類型(struct Arr,本文中的數組都是指該數據類型)進行

    1.初始化數組init

  • /*??
  • *?初始化數組?
  • *?@param?pArr?指向待初始化的結構體的指針,因為要改變結構體變量的值,?所以用指針???
  • *?@param?length?申請的數組長度,即數組的最大容量??
  • *?@return?void??
  • */??
  • void?init(struct?Arr?*?pArr,int?length){??
  • ???pArr->pBase?=?(int?*)malloc(sizeof(int)?*?length);//?pArr->pBase等價于(*pArr).pBase??
  • //判斷內存是否申請成功?
  • ??if(NULL?==?pArr->pBase){?
  • ??????printf("初始化失敗\n");?
  • ??????exit(-1);?
  • ???}?
  • ??pArr->len?=?length;//數組長度為length?
  • ??pArr->cnt?=?0;//數組有效數據個數為0?
  • ??return;//可寫可不寫,代表函數到此完畢?
  • }??
  • 2.給數組添加數據append

  • /*?
  • *?從數組后面添加數據?
  • *?@param?pArr?指向結構體Arr的指針?
  • *?@param?date?添加的數據?
  • *?@return?bool?
  • */?
  • bool?append(struct?Arr?*?pArr,int?date){?
  • ?????//數組已經達到最大容量,添加失敗(也可以想java?ArrayList一樣動態添加容量,本文不實現了)?
  • ????if?(?is_full(pArr)?)?
  • ????????return?false;?
  • ?
  • ????//沒有達到最大容量時?
  • ????pArr->pBase[pArr->cnt]?=?date;??
  • ????pArr->cnt++;?
  • ????return?true;?
  • }?
  • 3.從指定位置插入數據insert

  • /*??
  • *?從數組指定位置添加數據??
  • *?@param?pArr?指向結構體Arr的指針??
  • *?@param?pos?指定的位置?
  • *?@param?date?添加的數據??
  • *?@return?bool??
  • */??
  • bool?insert(struct?Arr?*?pArr,?int?pos,?int?date)?
  • {?
  • ????int?i;?
  • ????if?(is_full(pArr))//同append?
  • ????????return?false;?
  • ?
  • ????if?(pos<1?||?pos>pArr->cnt+1)??//指定的位置不在數組范圍內?
  • ????????return?false;?
  • ?
  • //將位置大于pos的數據往后移位
  • ????for?(i=pArr->cnt-1;?i>=pos-1;?--i)?
  • ????{?
  • ????????pArr->pBase[i+1]?=?pArr->pBase[i];?
  • ????}?
  • ????pArr->pBase[pos-1]?=?date;?//將date添加到指定位置
  • ????pArr->cnt++;?
  • ????return?true;?
  • }?
  • 4.刪除指定位置數據delete

  • /*???
  • *?從數組指定位置刪除數據???
  • *?@param?pArr?指向結構體Arr的指針???
  • *?@param?pos?指定的位置??
  • *?@return?bool???
  • */???
  • bool?delete_arr(struct?Arr?*?pArr,?int?pos)?
  • {?
  • ????int?i;?
  • ????if?(?is_empty(pArr)?)//為空無法刪除?
  • ????????return?false;?
  • ????if?(pos<1?||?pos>pArr->cnt)//指定的位置不在數組有值范圍(不是最大范圍)?
  • ????????return?false;?
  • ?
  • ????for?(i=pos;?i<pArr->cnt;?++i)?
  • ????{?
  • ????????pArr->pBase[i-1]?=?pArr->pBase[i];?
  • ????}?
  • ????pArr->cnt--;?
  • ????return?true;?
  • }?
  • 5.查找指定位置數據get

  • /*????
  • *?查找指定位置數據????
  • *?@param?pArr?指向結構體Arr的指針????
  • *?@param?pos?指定的位置?,從1開始??
  • *?@return?int?
  • */????
  • int?get(struct?Arr?*?pArr,int?pos){?
  • ???if?(pos?<?1?||?pos>pArr->cnt+1){?
  • ??????printf("查找的數據不存在\n");?
  • ??????exit(-1);?
  • ????}?
  • ????return?pArr->pBase[pos-1];?
  • }?
  • 6.判斷數組是否達到最大容量和是否為空的is_full和is_empty

  • bool?is_empty(struct?Arr?*?pArr)?
  • {?
  • ????if?(0?==?pArr->cnt)?
  • ????????return?true;?
  • ????else?
  • ????????return?false;????????
  • }?
  • ?
  • bool?is_full(struct?Arr?*?pArr)?
  • {?
  • ????if?(pArr->cnt?==?pArr->len)?
  • ????????return?true;?
  • ????else?
  • ????????return?false;?
  • }?
  • 暫時只寫這么多了,由于之前也沒有寫過這些東西,甚至都沒有學過C,有什么錯誤的地方還望指正.

    轉載于:https://blog.51cto.com/hjyang/857929

    總結

    以上是生活随笔為你收集整理的内功重修之数据结构----数组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。