線性表

線性表是n個相同數(shù)據(jù)類型的元素組成的有限序列冠息。
線性表按照存儲結(jié)構(gòu)可分為順序表和鏈表。
順序表都是內(nèi)存地址連續(xù)的元素組成的孕索!

順序表的構(gòu)建

  • 定義元素個數(shù)和順序表最大容量,初始化指針
  • 在構(gòu)造函數(shù)中傳參來確定size躏碳;length設(shè)為0搞旭;初始化指針地址。
#include <iostream>
#include <cstring>
using namespace std;
class Vector {
private:
    int size, length;
    int *data;
public:
    Vector(int input_size) {
        size = input_size;
        length = 0;
        data = new int[size];
    }
    ~Vector() {
        delete[] data;   // 析構(gòu)函數(shù)中進行刪除
    }
};
int main() {
    Vector a(2);
    return 0;
}

順序表的插入:

在insert方法中定義了參數(shù)loc菇绵,value肄渗。loc為插入的位置,value代表插入的數(shù)值咬最。每次插入都要將序列l(wèi)oc之后的元素向后移動一位翎嫡,并且長度length增加1。成功返回true永乌,否則false惑申。

  • 判斷l(xiāng)oc位置是否合法。位于0到length之間(包括length)翅雏,有元素在序列上才可以進行插入圈驼,所以開始為空時要順序插入。并且元素左右兩邊都可插入(所以位置為length時依然合法)望几。
  • 判斷元素個數(shù)是否超出最大容量(長度相等時就不能插入了绩脆,再插溢出)。
  • 將loc(包括loc)之后的元素右移
  • 插入賦值靴迫。
  • 元素個數(shù)加1惕味。
在構(gòu)造函數(shù)中添加insert方法
    bool insert(int loc, int value) {
        if(loc < 0 || loc > length){
        return false;
        }
        if (length >= size){
        return false;
        }
        
        for (int i = length; i > loc; i--){
            data[i] = data[i-1];
        }
        data[loc] = value;
        length += 1;
        return true;
    }

順序表的擴容:

通產(chǎn)來說,擴容通常是將容量修改為以前的兩倍玉锌;擴容時要重新開辟一塊空間并把原有數(shù)據(jù) 依次 拷貝過去名挥,再將原來的 空間 釋放

  • 保存原始數(shù)據(jù)到舊指針
  • 容量加倍芬沉。
  • 指針指向新size開辟的新空間躺同。
  • 數(shù)據(jù)拷貝
  • 在insert中調(diào)用 回收
    bool insert(int loc, int value) {
        if (loc < 0 || loc > length) {
            return false;
        }
        if (length >= size) {
            //return false;
            expand();
        }
        for (int i = length; i > loc; --i) {
            data[i] = data[i - 1];
        }
        data[loc] = value;
        length++;
        return true;
    }
    void expand(){
        int *old_data = data
        size = size * 2;
        data = new int[size] ;
        
        for(int i = 0; i <length;i ++){
            data[i] = old_data[i];
       
    }
        delete[] old_data;
    }

順序表的查找

接收一個int類型的value丸逸,返回該值對應(yīng)的下表蹋艺,沒有返回-1

從零循環(huán)到小于length,枚舉匹配:
int search(int value) {
        for(int i=0; i < length; i++){
            if (data[i] == value){
                return i
            }
        }
        return -1;
    }

順序表的刪除:index之后的元素向前移動一位黄刚。

  • 判斷index是否在元素中
  • index之后的元素向前移
  • 元素個素減1捎谨,返回true
bool remove(int index) {
        if(index < 0 || index >= length){
            return false
        }
        for(int i = index + 1; i < length; i++){
            data[i-1] = data[i];
        }
        length -= 1;
        return true;
    }

順序表的遍歷

把順序表的所有元素輸出到一行,并用空格分開憔维。

  • 判斷第一個元素涛救,不要輸出空格
  • 循壞遍歷輸出
void print() {
        for(int i = 0; i<length; i++){
            if(i > 0){
                cout << " ";
            }
            cout << data[i];
        }
        cout << endl; //輸出空行
    }

完整代碼:

#include <iostream>
#include <cstring>
using namespace std;
class Vector {
private:
    int size, length;
    int *data;
public:
    Vector(int input_size) {
        size = input_size;
        length = 0;
        data = new int[size];
    }
    ~Vector() {
        delete[] data;
    }
    bool insert(int loc, int value) {
        if (loc < 0 || loc > length) {
            return false;
        }
        if (length >= size) {
            return false;
        }
        for (int i = length; i > loc; --i) {
            data[i] = data[i - 1];
        }
        data[loc] = value;
        length++;
        return true;
    }
    int search(int value) {
        for (int i = 0; i < length; ++i) {
            if (data[i] == value) {
                return i;
            }
        }
        return -1;
    }
    bool remove(int index) {
        if (index < 0 || index >= length) {
            return false;
        }
        for (int i = index + 1; i < length; ++i) {
            data[i - 1] = data[i];
        }
        length = length - 1;
        return true;
    }
    void print() {
        for(int i = 0; i<length; i++){
            if(i > 0){
                cout << " ";
            }
            cout << data[i];
        }
        cout << endl
    }
};
int main() {
    Vector a(2);
    cout << a.insert(0, 1) << endl;
    cout << a.insert(0, 2) << endl;
    a.print();
    cout << a.remove(1) << endl;
    a.print();
    cout << a.search(0) << endl;
    cout << a.search(1) << endl;
    return 0;
}

引用:計蒜客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市业扒,隨后出現(xiàn)的幾起案子检吆,更是在濱河造成了極大的恐慌,老刑警劉巖程储,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹭沛,死亡現(xiàn)場離奇詭異,居然都是意外死亡章鲤,警方通過查閱死者的電腦和手機摊灭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來败徊,“玉大人帚呼,你說我怎么就攤上這事≈灞模” “怎么了煤杀?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪哺。 經(jīng)常有香客問我怜珍,道長,這世上最難降的妖魔是什么凤粗? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任酥泛,我火速辦了婚禮今豆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柔袁。我一直安慰自己呆躲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布捶索。 她就那樣靜靜地躺著插掂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腥例。 梳的紋絲不亂的頭發(fā)上辅甥,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音燎竖,去河邊找鬼璃弄。 笑死,一個胖子當(dāng)著我的面吹牛构回,可吹牛的內(nèi)容都是我干的夏块。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纤掸,長吁一口氣:“原來是場噩夢啊……” “哼脐供!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起借跪,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤政己,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掏愁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇由,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年托猩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辽慕。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡京腥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溅蛉,到底是詐尸還是另有隱情公浪,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布船侧,位于F島的核電站欠气,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镜撩。R本人自食惡果不足惜预柒,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宜鸯,春花似錦憔古、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至即碗,卻和暖如春焰情,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剥懒。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工内舟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蕊肥。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓谒获,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壁却。 傳聞我的和親對象是個殘疾皇子批狱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 1.線性表的定義 線性表:零個或多個數(shù)據(jù)元素的有限序列序列:也就是說元素之間是有順序的,若元素存在多個,則第一個元...
    e40c669177be閱讀 2,058評論 6 15
  • 從數(shù)據(jù)的邏輯結(jié)構(gòu)來分,數(shù)據(jù)元素之間存在的關(guān)聯(lián)關(guān)系被稱為數(shù)據(jù)的邏輯結(jié)構(gòu)展东。歸納起來赔硫,應(yīng)用程序中的數(shù)據(jù)大致喲如下四種基本...
    Jack921閱讀 926評論 0 2
  • 一爪膊、定義: 線性表是具有像線一樣的性質(zhì)的表,是一個序列砸王,元素間是有順序的推盛,如果存在多個元素的話,第一個元素?zé)o前驅(qū)谦铃,...
    nuclear閱讀 1,109評論 1 0
  • 一.線性表 定義:零個或者多個元素的有限序列耘成。也就是說它得滿足以下幾個條件:??①該序列的數(shù)據(jù)元素是有限的。??②...
    Geeks_Liu閱讀 2,697評論 1 12
  • 3.2 線性表的定義 線性表驹闰,從名字上你就能感覺到瘪菌,是具有像線一樣的性質(zhì)的表。 零個或多個數(shù)據(jù)元素的有限序列嘹朗。 這...
    努力生活的西魚閱讀 920評論 0 1