日韩性视频-久久久蜜桃-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实现基本动态数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一级片在线播放 | 黄色片小视频 | 在线观看中文字幕一区二区 | 高清视频在线免费观看 | 91免费福利视频 | 日少妇b| 天堂av在线网 | 久久亚洲精 | 精品视频第一页 | 自拍偷拍欧美日韩 | 91视频进入 | 亚洲另类图区 | 国产精品综合一区二区 | 国产第一页第二页 | 亚洲天堂视频在线 | 九九视频在线播放 | 国模二区| 11孩岁女毛片 | 九九av| 亚洲一区二区精品视频 | 五月天中文字幕 | 超碰成人在线免费观看 | 一级a毛片免费观看久久精品 | 男人天堂伊人 | www三级免费 | 日韩三级观看 | 性色av蜜臀av浪潮av老女人 | 91免费播放 | 蜜臀99久久精品久久久久久软件 | 可以看的av网址 | 婷婷九月综合 | 亚洲成人无码久久 | 国产精品手机在线观看 | 99涩涩 | 午夜嘿嘿嘿 | 久久综合福利 | 大地资源二中文在线影视观看 | 在线日本中文字幕 | 精品乱子伦 | 欧美亚洲综合另类 | 亚洲精品视频在线观看视频 | 在线观看亚洲国产 | av在线激情 | 朝桐光av在线一区二区三区 | 日本中文一区 | 先锋影音av在线资源 | 精品h | 在线免费观看的av | 日本无翼乌邪恶大全彩h | 欧美aaaa视频 | 无码粉嫩虎白一线天在线观看 | 日韩高清一二三区 | 人人爽人人爽人人片av | 国产精品丝袜视频 | 日韩欧美高清在线观看 | 亚洲无限看 | 性一交一乱一伧老太 | 成人午夜精品无码区 | 国产日韩欧美日韩大片 | 精品三级 | 成人精品视频一区二区三区尤物 | 成人av教育 | 伊人网在线视频观看 | 就爱啪啪网| 男女爽爽 | 亚洲欧美日韩成人在线 | 欧美日韩制服 | 开心综合网| 天天艹av | 国产在线综合视频 | 精品人妻一区二区三区浪潮在线 | 欧美xxxx喷水 | 中文字幕亚洲乱码熟女一区二区 | 小视频在线播放 | 特黄特色大片免费视频大全 | 亚洲在线观看av | 亚洲综合图色 | 男人看的网站 | 中文字幕第27页 | 久久日韩| 永久免费汤不热视频 | 亚洲黄色免费观看 | 五月婷婷深深爱 | 亚洲精品视频一区二区三区 | 色婷婷成人网 | 极品销魂美女少妇尤物 | 丝袜 亚洲 另类 欧美 重口 | 国产crm系统91在线 | 巨大胸大乳奶电影 | 狠狠躁18三区二区一区传媒剧情 | 精品成人无码一区二区三区 | av片免费| 中国黄色录像一级片 | 中文一区二区在线播放 | 免费黄色av电影 | 亚洲高清在线一区 | 黄瓜污视频 | 成人性做爰aaa片免费看不忠 | 国产二页 |