為什麼會有鍊錶?鍊錶解決了什麼問題? C語言

2021-10-24 00:18:32 字數 2743 閱讀 3401

title: 為什麼會有鍊錶?鍊錶如何使用?

date: 2020-04-01 16:30:10

author: jf

blog:

summary: 鍊錶如何使用?

tags:

- c語言

- 鍊錶

categories:

- c語言

或許這是讓每乙個it初學者很頭痛的問題,明明我們在之前已經接觸了陣列,感到陣列已經是萬能的資料儲存位置了,但是,如果我們一直使用比較複雜的資料(也就是比較多的資料時),我們肯定會感到很反感,因為對於陣列這種資料結構,在你自己使用之前,一定要對其大小進行一番定義,這樣一來,它的儲存空間在資料處理過程中顯得極為不方便,因為誰也不想對將要處理的資料做乙個空間的預算,這是我們每乙個程式設計師都很忌諱的,並且還要讓其空間足夠大,這樣才能滿足我們的要求(但是如果分配的太多,難免會浪費記憶體),上面的一切都證明使用陣列需要注意的東西真的很多很多,這樣一來,我們就開始說說鍊錶,鍊錶也是一種資料結構,它彌補了陣列帶來的諸多不便,讓我們可以任意為一些資料進行空間的分配,根據需要進行記憶體單元的開闢。

而對於鍊錶而言,分為靜態鍊錶和動態鍊錶,根據處理資料的方向又分為單向鍊錶和雙向鍊錶。

提到鍊錶我們都知道還有乙個比較重要的知識點就是指標,因為前後數資料要有關聯,必須要進行一系列的連線和指向處理,那麼扮演這個角色的就是指標,並且,在現在的程式語言中,指標是任何東西都沒有辦法去替代的。可見它的重要性。

當然在學習了結構體之後,我們對鍊錶的了解應該就比較輕鬆,說白了,鍊錶就是通過指標連線的多個結構體。知識每乙個結構體中有乙個存放指標的成員變數,並且,這個成員的型別是該結構體型別的。每乙個鍊錶,都有這個自己的結點,這些結點是結構體的變數,當然,他們也是結構體型別的變數。

鍊錶是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer).採用動態分配儲存單元方式。它能夠有效地節省儲存空間(同陣列比較)。

從本質上來講,鍊錶與陣列的確有相似之處,他們的相同點是都是線性資料結構,這與樹和圖不同,而它們的不同之處在於陣列是一塊連續的記憶體,而鍊錶可以不是連續記憶體,鍊錶的節點與節點之間通過指標來聯絡.

struct	結構體名

;例如: struct student

;struct student a,*p;

//如果結構體**現乙個指向自身的指標,我們叫自身指標,那一定是結點的型別。

動態儲存分配函式malloc()函式

格式:malloc(size)

作用是在記憶體的動態儲存區中分配乙個長度為size個位元組的連續空間,函式返回值為乙個指向分配域起始位址的指標若分配失敗則返回null。

例如:開闢乙個用於存放struct student資料的記憶體空間,並讓p指向該空間:

struct student *p = (struct student *)malloc(sizeof(struct student));

free()函式

格式:free(p);

作用是釋放用malloc()分配的記憶體。

鍊錶的操作

建立動態鍊錶(假定若輸入的成員為0則表示結束)

#include

struct node

;struct node *head,

*p,*q;

//申請乙個結點

鍊錶的操作

struct	node

;struct node *p;

int sum =0;

p = head;

while

(p !=

null

)

請將結點p從鍊錶中刪除

請將節點a從鍊錶中刪除並讓head重新指向鍊錶的第乙個結點。

刪除尾結點

將尾結點前乙個置為空,q->next = null

在中間新增結點(一定要先連後斷)

在頭結點上新增

在最後新增結點

將新節點的指標域為s,則:

s -> next =

null

;q -> next = s;

鍊錶為什麼刪除插入快!陣列為什麼查詢快!

1 它是具有相同資料型的資料,並且有一定的順序,陣列在記憶體中的位址是連續相鄰的。而鍊錶在記憶體中是雜湊存放的。2 cup快取會把一片連續的記憶體空間讀入。因為陣列結構是連續的內村位址,所以陣列全部或者部分元素被連續被存在cpu快取裡面,而鍊錶的節點是分散在堆空間裡面的,這時候cpu快取幫不上忙,只...

為什麼要使用MQ訊息中介軟體?它解決了什麼問題?

場景說明 使用者註冊後,需要發註冊郵件和註冊簡訊,傳統的做法有兩種1.序列的方式 2.並行的方式 1 序列方式 將註冊資訊寫入資料庫後,傳送註冊郵件,再傳送註冊簡訊,以上三個任務全部完成後才返回給客戶端。這有乙個問題是,郵件,簡訊並不是必須的,它只是乙個通知,而這種做法讓客戶端等待沒有必要等待的東西...

為什麼會有這麼多中間表?

中間表是資料庫中專門存放中間計算結果的資料表。報表系統中的中間表是普遍存在的。那麼,這些中間表是如何出現的?為什麼中間表會越來越多?中間表會給專案組帶來什麼樣的困擾,如何解決這些困擾?這裡我們就嘗試 一下這個問題。中間表出現的典型場景主要有三個 一步算不出來。資料庫中的原始資料表要經過複雜計算,才能...