C語言資料結構之鍊表篇

2021-08-05 19:13:16 字數 2600 閱讀 8290

線性表的定義

定義n個資料元素的有限序列,記作(a1, a2, …, an)ai 是表中資料元素,n 是表長度

線性表的特點

1. 除第乙個元素外,其他每乙個元素有乙個且僅有乙個直接前驅。

2. 除最後乙個元素外其他每乙個元素有乙個且僅有乙個直接後繼。

順序表的定義和特點

定義將線性表中的元素相繼存放在乙個連續的儲存空間中。           

可利用一維陣列描述儲存結構

特點線性表的順序儲存方式

遍歷順序訪問, 可以隨機訪問         

前插法建立單鏈表 :

從乙個空表開始,重複讀入資料:

生成新結點

將讀入資料存放到新結點的資料域中

將該新結點插入到鍊錶的前端直到讀入結束符為止。

後插法建立單鏈表:

每次將新結點加在鍊錶的表尾;

設定乙個尾指標 r,總是指向表中最後乙個結點,新結點插在它的後面;

尾指標 r 初始時置為指向表頭結點位址。

順序表與鍊錶的比較:

基於空間的比較

儲存分配的方式

順序表的儲存空間是靜態分配的

鍊錶的儲存空間是動態分配的

儲存密度 = 結點資料本身所佔的儲存量/結點結構所佔的儲存總量

順序表的儲存密度 = 1

鍊錶的儲存密度 < 1

基於時間的比較

訪問方式

順序表可以隨機訪問,也可以順序訪問

鍊錶是順序訪問的

插入/刪除時移動元素個數

順序表平均需要移動近一半元素

鍊錶不需要移動元素,只需要修改指標

若插入/刪除僅發生在表的兩端,宜採用帶尾指標的迴圈鍊錶

下面給大家奉上對鍊錶進行各種操作的**

#include "linklist.h"

#include

#include

node * create_list()

int insert_head(node *h, linkdata data)

node->data = data;

node->next = h->next;

h->next = node;

return true;

}int insert_last(node *h, linkdata data)

node->data = data;

node->next = null;

node* tmp = h;

while (tmp->next)

tmp->next = node;

return true;

}int insert_pos(node *h, int pos, linkdata data)

if (tmp == null)   // 越界

node *node = (node*)malloc(sizeof(node)/sizeof(char));

if (node == null)

node->data = data;

node->next = tmp->next;

tmp->next  = node;

return true;

}int delete_pos(node* h, int pos)

if (tmp->next == null)   // 越界

node *p = tmp->next;

tmp->next = p->next;

free(p);

return true;

}int reverse_list(node *h)

h->next->next = null;

h->next = pre;

return true;

}int delete_data(node* h, linkdata data)

if (tmp->next == null)

return false;

node *p = tmp->next;

tmp->next = p->next;

free(p);

return true;

}int find_element(node* h, linkdata data, int *x)

k++;

tmp = tmp->next;

}return false;

}int get_element(node* h, int pos, int *x)

if (tmp == null)

return false;

else

*x = tmp->data;

return true;

}int get_len(node * h)

return count;

}int clean_list(node * h)

return 0;

}void display(node *h)

printf ("\n");

}int destroy(node *h)

C 語言 資料結構之雙向鍊錶

雙向鍊錶的空間結構如下圖所示 int initdlist dlinklist head 初始化雙向迴圈鍊錶 int createdlist dlinklist head,int n 建立雙向迴圈鍊錶 return 1 void printdlist dlinklist head 輸出雙向迴圈鍊錶中的...

資料結構之鍊錶(C 語言描述)

鍊錶,是最基礎的資料結構之一,其儲存空間的不連續性以及便捷的新增節點和刪除節點的優點讓其應用頗廣。今天主要談一談鍊錶的一些基礎也是核心演算法,即鍊錶的增刪改查以及鍊錶反轉 reverse 由於用c 描述,我們直接就定義為結點類。如果用單純的c語言的話可以把它換成struct結構體。class nod...

C語言 資料結構之雙向鍊錶

本文將實現雙向鍊錶的基礎介面功能 1.初始化 銷毀 2.增刪改查 標頭檔案dlist.h pragma once 資料型別 typedef int dldatatype 結點型別 typedef struct dlistnode dlistnode 雙向鍊錶型別 typedef struct dli...