一.順序表(2)動(dòng)態(tài)分配

順序表的動(dòng)態(tài)分配

  • 元素為int類(lèi)型

  • 與靜態(tài)分配的區(qū)別,主要體現(xiàn)在定義,初始化,銷(xiāo)毀,自動(dòng)增長(zhǎng)

  • 查找,賦值操作是差不多的

  • 重載的方式來(lái)實(shí)現(xiàn)動(dòng)態(tài)分配的

定義

image-20210329111015697
typedef struct{
    int *data;
    int length; //當(dāng)前長(zhǎng)度
    int maxsize; //最大容量
}Dynamiclist;

初始化

void initDynamicList(Dynamiclist & l){
    l.data=(int *)malloc(sizeof(int) * MAXSIZE);
    if(!l.data){!        cout <<"分配失敗" <<endl;
    }
    
    for(int i=0;i<MAXSIZE;i++){ 
        l.data[i]=0;
       
    }
    l.length=0;
    l.maxsize=MAXSIZE;

}

銷(xiāo)毀

為了健壯性,最后再令其為空指針

bool destroyList(Dynamiclist  &l){
    free(l.data);
    l.length=0;
    l.maxsize=0;
    l.data=nullptr;
    if(!l.data){
        return true;
    }
    return false;
}

增長(zhǎng)

void increaseList(Dynamiclist &l,int n){
    int * p =l.data;
    l.data=(int *)malloc(sizeof(int)*(l.maxsize+n));
    for(int i=0;i<l.length;i++){ //改變的是data length還沒(méi)變
        l.data[i]=p[i];

    }
    l.maxsize+=n;
    free(p);

}

插入元素

當(dāng)長(zhǎng)度滿(mǎn)了的時(shí)候,自動(dòng)擴(kuò)增指定長(zhǎng)度的

bool insertList(Dynamiclist & l,int n,int number){
    if(n<0||n>l.length+1){
        cout <<"下標(biāo)有誤" <<endl;
        return false;
    }
    if(l.length>=l.maxsize){
        //自動(dòng)增長(zhǎng)長(zhǎng)度 MAXSIZE
        increaseList(l,MAXSIZE);
    }
    for(int i=l.length;i>=n;i++){
        l.data[i]=l.data[i-1];
    }
    l.data[n-1]=number;
    l.length++;
    return true;

}

刪除

bool deleteListByOrder(Dynamiclist & l,int n,int &number){
    if(n<0||n>l.length){
        cout <<"下標(biāo)有誤" <<endl;
        return false;
    }

    number=l.data[n-1];
    for(int i=n;i<l.length;i++){
        l.data[i-1]=l.data[i];
    }
    l.length--;
    return false;
}

查找

注意這里的數(shù)組形式,因?yàn)榉峙涞臅r(shí)候,malloc(int)長(zhǎng)度為單位的,用數(shù)組[]內(nèi)部會(huì)自動(dòng)轉(zhuǎn)換成地址加長(zhǎng)度,即下一個(gè)

int findElementByOrder(Dynamiclist  l,int n){
    return l.data[n-1];
}

int findElementByValue(Dynamiclist  l,int num){
    for(int i=0;i<l.length;i++){
        if(l.data[i]==num){
            return i+1;
        }
    }
    return -1;
}

其他

void printList(Dynamiclist  l){
    for(int i=0;i<l.length;i++){
        cout << "第" << i+1 << "個(gè)元素是" <<l.data[i] <<endl;
    }
}

int lengthOfList(Dynamiclist l){
    return l.length;
}

bool isEmpty(Dynamiclist l){
    if(!l.length){
        return true;
    }
    return false;
}

結(jié)果

==代碼測(cè)試==

void test_dy(){
    Dynamiclist l;
    initDynamicList(l);

    //表空
    if(isEmpty(l)){
        cout <<"表空" <<endl;

    }

    if(insertList(l,1,0)){
        cout <<"插入成功" <<endl;
    }
    //循環(huán)插入9個(gè)數(shù)
    for(int i=1;i<10;i++){
        insertList(l,i+1,i);
    }
    printList(l);

    //插入十個(gè)數(shù)后自動(dòng)增長(zhǎng),不會(huì)報(bào)錯(cuò)
    insertList(l,11,11);

    cout <<"表長(zhǎng)為" <<lengthOfList(l) <<endl;

    //查找5
    cout <<"5的位序是" <<findElementByValue(l,5) <<endl;

    //查找位置6
    cout <<"位置6的是" <<findElementByOrder(l,6) <<endl;

    //刪除位置6
    int num;
    deleteListByOrder(l,6,num);
    cout <<"刪除的是" <<num<<endl;
    printList(l);

    //銷(xiāo)毀
    destroyList(l);
    cout <<"表空?"<<isEmpty(l)<<endl; 

==結(jié)果==

表空
插入成功    
第1個(gè)元素是0
第2個(gè)元素是1
第3個(gè)元素是2
第4個(gè)元素是3
第5個(gè)元素是4
第6個(gè)元素是5
第7個(gè)元素是6
第8個(gè)元素是7
第9個(gè)元素是8
第10個(gè)元素是9
表長(zhǎng)為11
5的位序是6
位置6的是5
刪除的是5
第1個(gè)元素是0
第2個(gè)元素是1
第3個(gè)元素是2
第4個(gè)元素是3
第5個(gè)元素是4
第6個(gè)元素是6
第7個(gè)元素是7
第8個(gè)元素是8
第9個(gè)元素是9
第10個(gè)元素是11
表空?1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末血当,一起剝皮案震驚了整個(gè)濱河市缚柏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖厢岂,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴弃,死亡現(xiàn)場(chǎng)離奇詭異苛茂,居然都是意外死亡筛谚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)锐峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)中鼠,“玉大人,你說(shuō)我怎么就攤上這事沿癞≡停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵椎扬,是天一觀的道長(zhǎng)惫搏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚕涤,這世上最難降的妖魔是什么筐赔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮揖铜,結(jié)果婚禮上茴丰,老公的妹妹穿的比我還像新娘。我一直安慰自己蛮位,他們只是感情好较沪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布鳞绕。 她就那樣靜靜地躺著失仁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪们何。 梳的紋絲不亂的頭發(fā)上萄焦,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼拂封。 笑死茬射,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冒签。 我是一名探鬼主播在抛,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼萧恕!你這毒婦竟也來(lái)了刚梭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤票唆,失蹤者是張志新(化名)和其女友劉穎朴读,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體走趋,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅金,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了簿煌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氮唯。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姨伟,靈堂內(nèi)的尸體忽然破棺而出您觉,到底是詐尸還是另有隱情,我是刑警寧澤授滓,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布琳水,位于F島的核電站,受9級(jí)特大地震影響般堆,放射性物質(zhì)發(fā)生泄漏在孝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一淮摔、第九天 我趴在偏房一處隱蔽的房頂上張望私沮。 院中可真熱鬧,春花似錦和橙、人聲如沸仔燕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晰搀。三九已至,卻和暖如春办斑,著一層夾襖步出監(jiān)牢的瞬間外恕,已是汗流浹背杆逗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳞疲,地道東北人罪郊。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尚洽,于是被迫代替她去往敵國(guó)和親悔橄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容