數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)第一彈 線性表(1)

線性表

定義:

線性表:是一種典型的線性結(jié)構(gòu),由零個(gè)或多個(gè)數(shù)據(jù)元素組成的
有限數(shù)列

  • 首先他是一個(gè)序列越锈,也就是說(shuō)在相互數(shù)據(jù)元素之間是有順序的
  • 其次線性表強(qiáng)調(diào)的是有限個(gè)數(shù)據(jù)元素
  • 除了開頭元素只有一個(gè)后繼扛施,結(jié)尾元素只有一個(gè)前驅(qū)之外酬荞,其他元素有且僅有一個(gè)后繼元素和一個(gè)前驅(qū)元素

若把線性表表示為a1,a2,a3...ai,ai+1...an那婉,這里a1為開始
結(jié)點(diǎn)塑荒,an為終端結(jié)點(diǎn),ai-1是ai的前驅(qū)元素玩裙,ai+1是ai的后繼元素兼贸。

我們把線性表中的元素的個(gè)數(shù)n定義為線性表的長(zhǎng)度段直,當(dāng)n = 0時(shí)稱為
空表

線性表的基本操作

在線性表這種邏輯結(jié)構(gòu)上定義了八種基本的運(yùn)算

  • InitList(*L): 對(duì)表L初始化,建立一個(gè)空的線性表
  • ListEmpty(L): 判斷線性表是否為空表
  • ClearList(*L): 將線性表清空
  • GetElem(L, i, *e): 將線性表L中的第i個(gè)位置的元素值返回給e
  • LocateElem(L, e): 在線性表中查找一個(gè)值為e的元素溶诞,若找到則返回該元素的位置鸯檬,否則返回一個(gè)特殊值表示查找失敗
  • ListInsert(*L, i, e): 在線性表L中第i個(gè)位置插入一個(gè)元素e
  • ListDelete(*L, i, *e): 刪除線性表L中第i個(gè)位置元素,并用e返回其值
  • ListLength(L): 表L的長(zhǎng)度

由于存儲(chǔ)方式的不同螺垢,這幾種基本運(yùn)算的實(shí)現(xiàn)方式亦不同喧务,線性表主要
有兩種存儲(chǔ)方式:

  • 順序存儲(chǔ)結(jié)構(gòu)

  • 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

線性表的順序存儲(chǔ)結(jié)構(gòu)

線性表的順序存儲(chǔ)結(jié)構(gòu)指的是用一段地址連續(xù)的存儲(chǔ)單元以此存儲(chǔ)線性表的數(shù)據(jù)元素。
所以邏輯上相鄰的數(shù)據(jù)元素其物理存儲(chǔ)位置必須緊鄰

線性表順序存儲(chǔ)結(jié)構(gòu)的類型定義:

#define MAXSIZE 20          //線性表的最大容量
typedef int ElemType;       //線性表的數(shù)據(jù)類型
typedef struct
{
    ElemType data[MAXSIZE];
    int length;             //線性表的當(dāng)前長(zhǎng)度
}SqList;

線性表順序存儲(chǔ)結(jié)構(gòu)的具體操作:

//狀態(tài)碼定義
#define OK 1
#define ERROR 0
typedef int Status;

//初始化順序線性表
Status InitList(SqList *L)
{
    L->length = 0;
    return OK;
}
//判斷順序線性表是否為空表
int ListEmpty(SqList L)
{
    if(L.length)
        return 0;
    return 1;
}
//清空線性表
Status ClearList(SqList *L)
{
    L->length = 0;
    return OK;
}
//GetElem的具體操作
Status GetElem(SqList L,int i,ElemType *e)
{
    if(L.length == 0 || i<1 || i>L.length)
        return ERROR;
    else *e = L.data[i];
    return OK;
}
//LocateElem操作
int LocateElem(SqList L,ElemType e)
{
    int i;
    for(i=1;i<=L.length;i++)
    {
        if(L.data[i]==e)
            return i;
    }
    return ERROR;
}
//ListInsert操作
Status ListInsert(SqList *L,int i,ElemType e)
{
    if(L->length == MAXSIZE-1)
    {
        //順序線性表已經(jīng)滿了
        return ERROR;
    }
    if(i<1 || i>L->length+1)
    {
        //當(dāng)插入的位置不合理時(shí)
        return ERROR;
    }
    if(i<=L->length) //當(dāng)插入的位置不是表尾時(shí)
    {
        //所有元素向后移一位
        int k;
        for(k=L->length;k>=i;k--)
            L->data[k+1]=L->data[k];
    }
    L->data[i]=e;
    L->length++;
    return OK;
}
//ListDelete操作
Status ListDelete(SqList *L, int i, ElemType *e)
{
    int k;
    //判斷線性表是否為空表
    if(L->length == 0)
        return ERROR;
    //判斷刪除的元素位置是否異常
    if(i<1 || i>L->length)
        return ERROR;
    //返回刪除的值
    *e=L->data[i];
    for(k=i;k<L->length;k++)
        L->data[k]=L->data[k+1];
    L->length--;
    return OK;
}
//ListLength操作
int ListLenght(SqList L)
{
    return L.length;
}

線性表順序存儲(chǔ)結(jié)構(gòu)的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

  • 無(wú)需為表示表中元素之間的邏輯關(guān)系而增加額外的存儲(chǔ)空間
  • 可以快速的存取表中任意位置的元素

缺點(diǎn)

  • 插入和刪除操作需要移動(dòng)大量元素(O(n))
  • 線性表的長(zhǎng)度難以確定
  • 容易造成存儲(chǔ)空間的“碎片”枉圃,因?yàn)樯暾?qǐng)空間時(shí)功茴,是成塊成塊的,所以塊與塊之間肯能會(huì)存在碎片
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孽亲,一起剝皮案震驚了整個(gè)濱河市痊土,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墨林,老刑警劉巖赁酝,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旭等,居然都是意外死亡酌呆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門搔耕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隙袁,“玉大人,你說(shuō)我怎么就攤上這事弃榨∑惺眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵鲸睛,是天一觀的道長(zhǎng)娜饵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)官辈,這世上最難降的妖魔是什么箱舞? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮拳亿,結(jié)果婚禮上晴股,老公的妹妹穿的比我還像新娘。我一直安慰自己肺魁,他們只是感情好电湘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般寂呛。 火紅的嫁衣襯著肌膚如雪怎诫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天昧谊,我揣著相機(jī)與錄音,去河邊找鬼酗捌。 笑死呢诬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胖缤。 我是一名探鬼主播尚镰,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哪廓!你這毒婦竟也來(lái)了狗唉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涡真,失蹤者是張志新(化名)和其女友劉穎分俯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哆料,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缸剪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了东亦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杏节。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖典阵,靈堂內(nèi)的尸體忽然破棺而出奋渔,到底是詐尸還是另有隱情,我是刑警寧澤壮啊,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布嫉鲸,位于F島的核電站,受9級(jí)特大地震影響歹啼,放射性物質(zhì)發(fā)生泄漏充坑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一染突、第九天 我趴在偏房一處隱蔽的房頂上張望捻爷。 院中可真熱鬧,春花似錦份企、人聲如沸也榄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)甜紫。三九已至降宅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囚霸,已是汗流浹背腰根。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拓型,地道東北人额嘿。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像劣挫,于是被迫代替她去往敵國(guó)和親册养。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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