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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C实现基本动态数组

發布時間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C实现基本动态数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言實現基本動態數組:

1 #include <stdio.h> 2 #include <malloc.h> 3 #include <string.h> 4 #define INIT_CAP 4 //初始分配空間大小 5 #define _Bool unsigned short 6 typedef int ADT; 7 typedef struct{ 8 unsigned size; //數組元素數量 9 unsigned capacity; //容量大小 10 ADT *begpos, *endpos; //初始位置指針,末尾位置指針 11 }Arr, *pArr; 12 13 pArr Init(pArr p){ 14 p -> begpos = (ADT*)malloc(sizeof(ADT) * INIT_CAP); //申請 每個元素字節數*初始分配存儲單元個數 大小的空間 15 p -> size = 0; //初始個數置為0 16 p -> capacity = INIT_CAP; //初始容量為默認大小 17 p -> endpos = p -> begpos; //初始化尾指針與首指針位置相同 18 } 19 20 _Bool Extend(pArr p){ //擴展數組容量大小 21 ADT* newspace = (ADT*)malloc(sizeof(ADT) * p -> capacity * 2); //申請原來空間兩倍大小的空間 22 if(newspace == NULL) return 0; //申請失敗返回0 23 memcpy(newspace, p -> begpos, sizeof(ADT) * p -> capacity); //將原來數組元素復制到新數組 24 free(p -> begpos); //釋放原數組空間 25 p -> begpos = newspace; //首指針指向新數組首部 26 p -> capacity *= 2; //容量擴大2倍 27 p -> endpos = p -> begpos + p -> size; //尾指針更新 28 return 1; 29 } 30 31 ADT* Add(const pArr p, const ADT value){ //添加新元素 32 if(p -> capacity == p -> size){ //判斷空間是否已滿 33 if(!Extend(p)){ //擴展新空間 34 printf("add %d failed! Maybe have memery not enough.\n", value); 35 return NULL; 36 } 37 } 38 *p -> endpos = value; //在尾指針處放置新元素 39 ++ p -> endpos; //尾指針后移 40 ++ p -> size; //元素數量增加 41 printf("Add number: %d, Size now: %d/%d\n", value, p -> size, p->capacity); 42 } 43 44 void Clear(const pArr p){ //清空數組 45 p -> size = 0; 46 p -> endpos = p -> begpos; 47 } 48 49 void Desdroy(const pArr p){ //銷毀數組 50 free(p -> begpos); 51 } 52 53 void Traverse(const pArr p){ //遍歷數組 54 if(!p -> size){ 55 printf("Empty!\n"); 56 return; 57 } 58 printf("\nTraverse: "); 59 ADT* beg = p -> begpos; 60 while(beg != p -> endpos){ 61 printf("%d ", *beg); 62 ++ beg; 63 } 64 printf("\n"); 65 } 66 67 _Bool less(const ADT v, const ADT aim){ //條件函數(小于某值) 68 return v < aim; 69 } 70 _Bool grater(const ADT v, const ADT aim){ //條件函數(大于某值) 71 return v > aim; 72 } 73 74 unsigned Remove(const pArr p, const int aim){ //刪除數組值為 aim 的元素 75 unsigned count = 0; 76 ADT* w = p -> begpos, *r = p -> begpos; //設置兩個指針初始指向首地址 77 for(; r!=p -> endpos; ++r){ //通過兩個指針移動刪除某值 78 if(*r == aim){ 79 ++ count; 80 -- p -> size; 81 } 82 else *w++ = *r; 83 } 84 p -> endpos = w; 85 return count; //返回刪除個數 86 } 87 88 unsigned Remove_if(const pArr p, const ADT arg, _Bool(* con)(ADT, ADT)){ //條件刪除指定元素 89 unsigned count = 0; 90 ADT* w = p -> begpos, *r = p -> begpos; 91 for(; r!=p -> endpos; ++r){ 92 if(con(*r, arg)){ 93 ++ count; 94 -- p -> size; 95 } 96 else *w++ = *r; 97 } 98 p -> endpos = w; 99 return count; 100 } 101 102 int main(){ 103 Arr array; 104 Init(&array); 105 106 Add(&array, 3); 107 Add(&array, 6); 108 Add(&array, 2); 109 Add(&array, 1); 110 Add(&array, 5); 111 Traverse(&array); 112 Clear(&array); 113 Traverse(&array); 114 115 Desdroy(&array); 116 Init(&array); 117 Add(&array, 4); 118 Add(&array, 4); 119 Add(&array, 3); 120 Add(&array, 8); 121 Add(&array, 4); 122 Traverse(&array); 123 printf("Has removed %d numbers.\n", Remove_if(&array, 5, less)); //刪除小于5的所有元素 124 Traverse(&array); 125 126 return 0; 127 }

?

測試輸出:

Add number: 3, Size now: 1/4 Add number: 6, Size now: 2/4 Add number: 2, Size now: 3/4 Add number: 1, Size now: 4/4 Add number: 5, Size now: 5/8Traverse: 3 6 2 1 5 Empty! Add number: 4, Size now: 1/4 Add number: 4, Size now: 2/4 Add number: 3, Size now: 3/4 Add number: 8, Size now: 4/4 Add number: 4, Size now: 5/8Traverse: 4 4 3 8 4 Has removed 4 numbers.Traverse: 8

?

轉載于:https://www.cnblogs.com/alphakin/p/8735134.html

總結

以上是生活随笔為你收集整理的C实现基本动态数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产日产亚洲系列最新 | 法国空姐电影在线观看 | 女人下面无遮挡 | 成年女人免费视频 | 777理伦三级做爰 | 成年黄色网| 97在线免费观看 | 91av视频免费观看 | 国产精品一卡 | 欧美三日本三级少妇三 | 色悠悠视频 | 91呦呦 | 亚洲一区二区三区黄色 | 99热6这里只有精品 三级av在线免费观看 | 日本在线网站 | 成人动漫一区二区 | 91精品国产成人 | 成人黄色在线看 | 97超碰在线资源 | 亚洲免费色 | 国产强被迫伦姧在线观看无码 | 日韩在线电影一区二区 | 日本不卡视频 | 冲田杏梨在线 | 关之琳三级全黄做爰在线观看 | 99热自拍偷拍 | 日韩特黄| 人人澡超碰碰97碰碰碰 | 九九热久久免费视频 | 国产又粗又猛又爽69xx | 日本va欧美va国产激情 | 日韩天堂av | 一本大道综合伊人精品热热 | 亚洲深夜福利 | 中文字幕一区二区视频 | 九九热中文字幕 | 在线观看成人网 | 国产日韩欧美精品一区二区 | 欧美又大粗又爽又黄大片视频 | 污视频91| 93久久精品日日躁夜夜躁欧美 | 国产精品电影一区二区三区 | 男人肌肌桶女人肌肌 | 国产精品一区二区在线观看 | 视频一区二区欧美 | 中文在线第一页 | 神马午夜嘿嘿 | 视频久久精品 | 一级a性色生活片久久毛片 爱爱高潮视频 | 日韩精品免费一区二区夜夜嗨 | 人成免费在线视频 | 在线观看免费视频国产 | 四虎影视最新网址 | 人操人| 日韩一级生活片 | 片黄在线观看 | 国产女同在线观看 | 精品三级av | 就去干成人网 | 欧美一及片| 在线观看日韩一区二区 | 精品免费国产一区二区三区 | www亚洲| 激情综合网五月婷婷 | 午夜黄色在线观看 | 久操超碰 | 色葡萄影院 | 午夜一区二区三区免费 | 亚洲免费福利视频 | 亚洲欧美综合 | 亚洲高清在线 | 亚洲精视频 | 欧美日韩国产免费 | 在线xxxx| a网站在线观看 | 美女被揉胸视频 | 亚洲最大视频网 | 色人综合 | 97xxx| japanese中文字幕 | 欧美高清性xxxxhd | 99热自拍偷拍 | 国产精品美女高潮无套 | 天堂av资源 | 亚洲精品自拍视频 | 精品人妻少妇一区二区 | 国产原创一区 | 对白刺激国产子与伦 | 日日摸日日添日日躁av | 国产亚洲欧美在线视频 | 亚洲蜜桃精久久久久久久久久久久 | 国产成人亚洲综合 | 成av在线 | 人人狠狠综合久久亚洲 | 一本色道久久综合亚洲精品小说 | 欧美激情免费 | 天天燥日日燥 | 日韩在线不卡av | 日本亚洲在线 |