數(shù)據(jù)結(jié)構(gòu)線性表


title: 06-數(shù)據(jù)結(jié)構(gòu)及算法-線性表
date: 2019-11-17 20:34:00
tags: 數(shù)據(jù)結(jié)構(gòu)及算法


記錄線性表相關(guān)知識

線性表的類型及定義

什么是線性表

線性表:一個線性表是n個數(shù)據(jù)特性相同的數(shù)據(jù)元素的有序序列甫贯。

在稍微復(fù)雜的線性表中,一個數(shù)據(jù)元素可以由多個數(shù)據(jù)項構(gòu)成蒸苇。
線性表中元素的個數(shù)n(n大于等于0)定義為線性表的長度,n=0時成為空表。
線性表是一個相當(dāng)靈活的數(shù)據(jù)結(jié)構(gòu),可以根據(jù)需要增長或縮短。

對于非空的線性表或者線性結(jié)構(gòu)的特點:

  1. 第一個數(shù)據(jù)元素沒有前驅(qū)津函,這個數(shù)據(jù)元素被稱為開始節(jié)點。
  2. 最后一個元素沒有后繼孤页,這個元素被稱為終端節(jié)點纺弊。
  3. 除了第一個和最后一個數(shù)據(jù)元素外卷仑,其他數(shù)據(jù)元素有且僅有一個前驅(qū)和一個后繼秩伞。

線性表的順序表示及實現(xiàn)

順序表的定義

  • 線性表的順序表示指的是用一組地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素待讳。

順序表的特點

  • 用元素在計算機內(nèi)“物理位置相鄰”來表示線性表中數(shù)據(jù)元素之間的相鄰蛤售。
  • 存儲密度高寻狂,但要預(yù)先分配“足夠應(yīng)用”的存儲空間访娶,這可能會造成存儲空間的浪費又固。
  • 便于隨機存儲
  • 插入刪除操作繁瑣

線性表的順序存儲

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

// 線性表的順序存儲結(jié)構(gòu)
#include <iostream>
#include<stdio.h>
#include<stdlib.h>

#define Max 80
#define Increment 10
typedef struct
{
    int* elem;
    int length;
    int size;
}SqList;


線性表的初始化

// 線性表的初始化
// 為順序表分配一個預(yù)定大小的數(shù)組空間冰寻,并將順序表的長度設(shè)為0
void InitList(SqList& L) 
{
    L.elem = (int*)malloc(Max * sizeof(int));
    if (!L.elem) {
        printf("存儲空間分配失斝虢獭!");
        return;
    }
    L.length = 0; //空表長度為0
    L.size = Max; //初始存儲容量
    printf("初始化成功");
}

獲取指定位置元素

// 獲取元素
// 將線性表中的第i個位置元素值返回
int GetElem(SqList& L, int i, int *e)
{
    if (i<1 || i>L.length) {
        printf("位置信息錯誤");
        return 0;
    }
    *e = L.elem[i-1];
    printf("獲取成功");
    return 1;
}

線性表的插入操作

// 插入元素
// 在指定位置插入元素
int ListInsert(SqList& L, int i,int e)
{
    int* _new;
    if (i<1 || i>L.length)
    {
        printf("插入位置不合法斩芭!\n");
        return -1;
    }
    if (L.length >= L.size)
    {
        _new = (int*)realloc(L.elem,(L.length + Increment) * sizeof(int));
        if (!_new)exit(0);
        L.elem = _new;
        L.size += Increment;
    }
    for (int k = L.length - 1; k >= i - 1; k--)
    {
        L.elem[k + 1] = L.elem[k];
    }
    L.elem[i - 1] = e;
    L.length++;
}

順序存儲結(jié)構(gòu)的優(yōu)缺點

優(yōu)點:

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

缺點:

  • 插入和刪除需要移動大量元素
  • 線性表長度變化較大時轻腺,不容易確定存儲空間的容量
  • 造成存儲空間的“碎片”

線性表的鏈式存儲

順序存儲中,插入和刪除時需要移動大量元素划乖,這會耗費大量的時間贬养,導(dǎo)致這些問題的原因是相鄰兩個元素的存儲位置也相鄰,中間沒有空隙琴庵。
為解決上述問題误算,我們不再考慮相鄰元素存儲位置的相鄰關(guān)系,只要做到讓當(dāng)前位置的元素知道下一個元素的位置即可迷殿。

線性表的鏈式存儲:

鏈式存儲示意.png

為了表示每個數(shù)據(jù)與其后繼元素之間的邏輯關(guān)系儿礼,數(shù)據(jù)元素除了存儲本身的信息外,還需要存儲其直接后繼的信息庆寺。
這兩部分信息組成數(shù)據(jù)元素a的存儲映像蚊夫,稱為結(jié)點;它包含兩個域:其中存儲數(shù)據(jù)元素信息的稱為數(shù)據(jù)域懦尝;存儲直接后繼存儲位置的域稱為指針域知纷,指針域中存儲的信息稱作指針或鏈。

注意:

  1. 整個鏈表的存取必須從頭指針開始進行陵霉。
  2. 最后一個元素沒有直接后繼屈扎,則線性鏈表中最后一個結(jié)點的指針為“空”(NULL);

線性表的鏈式存儲結(jié)構(gòu)

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

#define OK 1
#define ERROR 0
typedef struct LNode {
    int data;
    struct LNode* next;
}LNode,*LinkList;

未完待續(xù)。撩匕。鹰晨。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末模蜡,一起剝皮案震驚了整個濱河市漠趁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忍疾,老刑警劉巖闯传,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卤妒,居然都是意外死亡甥绿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門则披,熙熙樓的掌柜王于貴愁眉苦臉地迎上來共缕,“玉大人,你說我怎么就攤上這事士复⊥脊龋” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵阱洪,是天一觀的道長便贵。 經(jīng)常有香客問我,道長冗荸,這世上最難降的妖魔是什么承璃? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蚌本,結(jié)果婚禮上绸硕,老公的妹妹穿的比我還像新娘。我一直安慰自己魂毁,他們只是感情好玻佩,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著席楚,像睡著了一般咬崔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烦秩,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天垮斯,我揣著相機與錄音,去河邊找鬼只祠。 笑死兜蠕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抛寝。 我是一名探鬼主播熊杨,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼曙旭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晶府?” 一聲冷哼從身側(cè)響起桂躏,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎川陆,沒想到半個月后剂习,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡较沪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年鳞绕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸曼。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡们何,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骡苞,到底是詐尸還是另有隱情垂蜗,我是刑警寧澤楷扬,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布解幽,位于F島的核電站,受9級特大地震影響烘苹,放射性物質(zhì)發(fā)生泄漏躲株。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一镣衡、第九天 我趴在偏房一處隱蔽的房頂上張望霜定。 院中可真熱鬧,春花似錦廊鸥、人聲如沸望浩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磨德。三九已至,卻和暖如春吆视,著一層夾襖步出監(jiān)牢的瞬間典挑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工啦吧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留您觉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓授滓,卻偏偏與公主長得像琳水,于是被迫代替她去往敵國和親肆糕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355