什麼是鍊錶:是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(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區分子元素,好像...