第二講 線性結構

2021-10-02 23:58:23 字數 3089 閱讀 8062

1,順序儲存

線性表是零個或多個資料元素的有限序列,元素之間有順序,且第乙個元素無前驅,最後乙個元素沒有後繼,其它的元素都有乙個前驅乙個後繼,就是我們說的一對一。

我們先來談一談順序儲存結構,順序儲存是通過一維陣列來實現的,且順序結構儲存需要三個屬性,儲存空間的起始位置,線性表的最大儲存容量,以及線性表的當前長度。如果需要獲取裡面的資料,那麼要通過下標的值來獲取。

插入操作

陣列的插入,那麼我們要先判斷空間是否足夠,因為陣列是乙個固定的儲存結構,如果我們想要插入乙個數,那麼我們要從要插入的位置開始,把所有的數都往後移一位,把當前位置空出來,然後再把數插進去,下面是**實現

bool insert

( list l, elementtype x )

for(i=

0;i<=l->last;i++

) l->data[i]

=x; l->last=l->last+1;

break;}

else

if(l->last==i&&l->data[i]

>x)

}return true;

}

刪除操作

那麼我們找到當前想要刪除的地方,先判斷當前刪除的位置是否在陣列範圍內,然後如果是在中間我們可以將從這個位置開始之後的元素都往前移動一位,如果在末尾,我們就不用移動直接刪去就行。我們寫一下主要的步驟

if

(l->length==0)

//判斷陣列是否為空

return error;

if(il->length)

//判斷是不是越界

return error;

if(ilength)

//判斷刪除位置是否為末尾

l->length--

;return true;

}

總結一下順序儲存結構的優缺點

優點是可以快速的獲取表中的元素,缺點是插入刪除需要移動大量元素,當資料過多時,難以確定乙個容量。

2,鏈式儲存

鏈式儲存結構就是為了解決插入刪除這個麻煩的問題的,鏈式儲存結構是有多個結點構成的乙個鍊錶,每乙個結點有兩個部分構成,乙個是存放資料的資料域乙個是用來鏈結結點的指標域,我們稱第乙個結點為頭結點,因為有兩部分構成,所以我們在構建乙個鍊錶的時候往往採用的是結構體來定義

struct node

{ elemtype data;

struct node *next;

};

如果想要讀取其中的乙個數,我們常常會設乙個頭指標方便我們遍歷鍊錶。

插入操作

單鏈表的插入就不像陣列那樣,而是直接申請乙個新的空間,然後改變指標,就可以完成插入操作,如下圖

核心**是

struct node *s;s=(

struct node *

)malloc

(sizeof

(struct node));

s->date=e;

s->next=p->next;

p->next=s;

如果看不懂可以結合上面的圖看看

刪除操作

刪除操作就更容易理解了,直接把p的指標指向當前所指結點的下乙個結點

還有迴圈鍊錶,迴圈鍊錶其實和單鏈表沒差別就是將尾指標指向頭部,雙向鍊錶就是加了乙個指向前驅的指標,使得遍歷更方便。

鍊錶的優缺點

鍊錶的優點是可以儲存任意多得資料,不用擔心會越界,且不會浪費儲存空間,想要就隨時申請,而且刪除插入很方便,不用去移動其它位置的數,缺點是想要找到每個數的時候每次都要從頭開始遍歷尋找。

棧的作用我們可以聯想一下手槍,先裝進去的子彈肯定是最後打出去的,最後裝的,一定是第乙個打出去的,由此我們可以聯想到棧其實就是僅僅限定在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何元素的稱為空棧。我們可以對棧進行簡單記憶就是後進先出。棧的插入操作又稱為進棧,也稱壓棧,入棧,棧的刪除操作,叫作出棧,又稱為彈棧。

棧的順序儲存的結構及實現

我們也可以使用陣列來實現,通過移動rail來實現入棧和出棧。

int head=

0,rail=

0,t;

int a[

1000];

for(

int i=

0;i<

100;i++

)//入棧

for(

int i=

0;i<

100;i++

)//出棧

棧的應用—四則運算表示式求值

先看字尾表示式的計算

中綴表示式轉字尾表示式

佇列的定義,佇列就相當於我們日常生活中的排隊,排在前面的人先走,佇列就是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。

佇列也可以用陣列來實現,通過移動隊尾標記來實現插入,移動頭標記實現刪除操作。

int head=

0,rail=

0,t;

int a[

100]

;for

(int i=

0;i<

100;i++

)for

(int i=

0;i<

100;i++

)

第二講線性結構

簡單來說像這樣的猶如一條線的結構就屬於線性結構常見有我們熟知的陣列還有單鏈表。在學資料結構之前我們對陣列就很了解了,最簡單的就是一維陣列,一維陣列也是最簡單的線性結構。優點 1.訪問方便,之間訪問下標對應元素即可 2.寫起來也方便用起來也方便看著也舒服 缺點 1.在中間位置插入元素時,其後所以元素都...

資料結構 第二講 線性結構(堆疊和佇列)

堆疊和佇列都是對線性表做一些特殊的限制,形成了兩種儲存資料的結構,乙個是先進後出 乙個是先進先出 可以解決實際生活中遇到的一些問題,資料庫也可以理解成一種資料結構,只不過這種結構比較普通罷了。2.2.1 什麼是堆疊 先進後出,後進先出的線性表就是堆疊,相當於對線性表的操作做一些特殊的限制 堆疊 有一...

第二講 資料結構

include using namespace std const int n 100010 int e n ne n head 1,idx 向煉表頭插入乙個數x o 1 void add to head int x 在第k個插入的數後面插入乙個數x o 1 要用鍊錶那就是o n void add ...