国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)【動(dòng)態(tài)數(shù)組】

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)【動(dòng)態(tài)數(shù)組】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)【動(dòng)態(tài)數(shù)組】

在堆中申請(qǐng)數(shù)組空間,擴(kuò)容時(shí)realloc,注意不可增刪改的情況并處理即可。

以下代碼不一定完全正確。文章來源地址http://www.zghlxwxcb.cn/news/detail-749242.html

#include <stdio.h>
#include <stdlib.h>

/**
 * 聲明動(dòng)態(tài)數(shù)組,并提供相關(guān)的函數(shù)操作
 */


// 動(dòng)態(tài)數(shù)組結(jié)構(gòu)體
typedef struct Array
{

    // 動(dòng)態(tài)數(shù)組
    int *elementData;

    // 容量
    size_t capacity;

    // 長(zhǎng)度
    size_t size;

} DynamicArray;



// 初始化動(dòng)態(tài)數(shù)組
void initDynamicArray(DynamicArray *array, size_t initialCapacity);
// 釋放動(dòng)態(tài)數(shù)組內(nèi)存
void destroyDynamicArray(DynamicArray *array);
// 調(diào)整動(dòng)態(tài)數(shù)組內(nèi)存大小
void resizeDynamicArray(DynamicArray *array, size_t newCapacity);
// 獲取動(dòng)態(tài)數(shù)組長(zhǎng)度(元素個(gè)數(shù))
size_t getLength(const DynamicArray *array);
// 在指定位置插入新元素
void insertAt(DynamicArray *array, size_t index, int element);
// 在末尾插入新元素
void insertEnd(DynamicArray *array, int element);
// 刪除指定位置的元素并返回被刪除的元素
int deleteAt(DynamicArray *array, size_t index);
// 刪除末尾的元素并返回被刪除的元素
int deleteEnd(DynamicArray *array);
// 遍歷所有的元素
void print(DynamicArray *array);


/**
 * 主函數(shù)
*/
int main(int argc, char const *argv[])
{
    DynamicArray array;
    initDynamicArray(&array, 2);
    insertAt(&array, 0, 10);
    insertAt(&array, 0, 20);
    insertAt(&array, 0, 20);
    print(&array);


    getchar();
    return 0;
}


// 初始化動(dòng)態(tài)數(shù)組
void initDynamicArray(DynamicArray *array, size_t initialCapacity){

    // 分配空間
    if (initialCapacity > 0) {
        array->elementData = (int *) malloc(initialCapacity * (sizeof(int)));
    } else if (initialCapacity == 0) {
        array->elementData = NULL;
    } else {
        printf("您輸入的長(zhǎng)度不合法。");
        return;
    }

    // 初始化capacity
    array->capacity = initialCapacity;

    // todo 初始化size
    array->size = 0;
}
// 釋放動(dòng)態(tài)數(shù)組內(nèi)存
void destroyDynamicArray(DynamicArray *array){
    free(array->elementData);
}

// 擴(kuò)容
void resizeDynamicArray(DynamicArray *array, size_t newCapacity){
    printf("1.5倍擴(kuò)容啟動(dòng)\n");
    array->elementData = realloc(array->elementData, newCapacity*sizeof(int));
    array->capacity += array->capacity>>1;
}

// 獲取動(dòng)態(tài)數(shù)組長(zhǎng)度(元素個(gè)數(shù))
size_t getLength(const DynamicArray *array){
    return array->size;
}

// 在指定位置插入新元素
void insertAt(DynamicArray *array, size_t index, int element){
    // index 不符合規(guī)則的情況
    if(index < 0 || index > array->size){
        printf("無效的位置輸入\n");
        return;
    }
    (array->size == array->capacity) ? resizeDynamicArray(array, array->capacity += array->capacity>>1) : 0;
    //
    for(int i = array->size; i>index; i--){
        array->elementData[i] = array->elementData[i-1];
    }
    array->elementData[index] = element;
    array->size++;
}

// 在末尾插入新元素
void insertEnd(DynamicArray *array, int element){
    insertAt(array, array->size, element);
}

// 刪除指定位置的元素并返回被刪除的元素
int deleteAt(DynamicArray *array, size_t index){
    if(index < 0 || index >= array->size){
        printf("無效的元素刪除\n");
        return -1;
    }
    int temp = array->elementData[index];
    for(int i = index+1; i<array->size; i++){
        array->elementData[i-1] = array->elementData[i];
    }
    array->size--;
    return temp;
}

// 刪除末尾的元素并返回被刪除的元素
int deleteEnd(DynamicArray *array){
    return deleteAt(array, array->size-1);
}

// 遍歷所有的元素
void print(DynamicArray *array){
    for(int i = 0; i<array->size; i++){
        printf("%d\n", array->elementData[i]);
    }
    printf("\n");
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)【動(dòng)態(tài)數(shù)組】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包