鍊錶學習(1)

2021-09-30 14:15:16 字數 1789 閱讀 9986

什麼是鍊錶:是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而順序表相應的時間複雜度分別是o(logn)和o(1)。

使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。

建立鍊錶,先建結構體

struct student          //學生結構體  

;

一.建立create函式,功能:建立鍊錶

指標變數:head頭指標,end指向原來的尾節點,new指向新建立的節點

struct student * head = null;   //初始化煉表頭指標為空  

struct student * end,* new;

使用malloc將end,new分配記憶體

end = new = (struct student *)malloc(sizeof(struct student));  

scanf("%s",new->name);

scanf("%d",&new->number);

用count++計算加入的節點個數

while(0

!=new

->number)

else

new= (struct student *)malloc(sizeof(struct student));//再次分配結點記憶體空間

scanf("%s",new

->name);

scanf("%d",&

new->number);

} free(new); //釋放沒用到的空間

二.建立鍊錶輸出函式

head表示乙個鍊錶的頭結點。

在函式中,定義乙個臨時的指標temp用來進行迴圈操作。定義乙個整型變數表示鍊錶中的結點序號。

然後將臨時指標temp指標變數儲存首結點的位址。

使用while語句將所有的結點中儲存的資料都顯示輸出。其中每輸出乙個結點的內容後,就移動

temp指標變數指向下乙個結點的位址。當最後乙個結點時,所擁有的指標指向null,此時迴圈結束。

void print(struct student * head)  

}

struct student * insert(struct student * head)  

四.建立刪除函式

​ 函式兩個傳遞引數,head和index,head為頭指標,index為要刪除的節點位址

然後定義兩個變數,迴圈index次找到刪除的節點位置和它的前節點,最後釋放空間,count--。

void

delete(struct student * head,int index)//head表示頭結點,index表示要刪除的結點下標

pre->next = temp->next; //連線刪除結點兩邊的結點

free(temp); //釋放掉要刪除結點的記憶體空間

count--; //減少鍊錶中的元素個數

}

鍊錶的學習(1)

關於鍊錶的插入,存在兩種插入方式 頭插法和尾插法。顧名思義,就是在鍊錶的頭部和尾部分別插入資料,則產生的順序也就不一樣。比如要插入的資料是1 2 3 4 5這5個數。頭插法即先將1插入到空的鍊錶中,之後2插到1的前面,依次類推產生的鍊錶就是5 4 3 2 1,而尾插法和頭插法正好相反,即1 2 3 ...

鍊錶學習小記1

include include include 確認乙個鍊錶需要乙個引數 頭指標 儲存著首結點的位址 typedef int data t 定義結點 typedef struct nodenode,linklist 函式宣告區 鍊錶定義 增刪改查 linklist list create 建立鍊錶 ...

QML學習筆記1鍊錶

一 model 模型 和view 檢視 都通過delegate 連線。model提供資料,每個資料項可能有多個值。二 repeater檢視 適合有限的靜態資料,不可滑動 最基本的分離資料與顯示的方法,被用於例項化一組資料項,很容易與乙個用於填充使用者介面的定位器相結合。通過index區分子元素,好像...