將線性表l=(a0,a1,
……,an-1)
中各元素分布在儲存器的不同儲存塊,稱為結點,通過位址或指標建立它們之間的聯絡,所得到的儲存結構為鍊錶結構,表中
ai的結點形式如圖表示:
其中結點的data
域存放資料元素
ai,而
next
域是乙個指標,指向
ai的直接後繼
ai+1
所在的結點。單鏈表結構如下:
單鏈表的建立:
#include #include #include #include typedef int datatype;
//宣告結點,結點包括元素資料以及指標域。
typedef struct node
linknode,*linklist;
//初始化鍊錶。1)分配記憶體;2)將頭節點指標域指向空,該指向也是鍊錶遍歷的判斷依據;3)返回頭節點位址。
linklist init_list(void)
//插入結點。1)新建結點,對於鍊錶來說,不同於順序表一次性將總表長的記憶體分配完畢,因此在每次新建
//結點都該給新結點newnode分配記憶體;2)將插入的資料賦予newnode的data域;3)定義中間結點p,p主要在
//遍歷過程中起作用,初始化p等於head頭結點進行遍歷,當p->next指向null時,說明當前結點為末結點,
//否則繼續遍歷下一結點;4)在找到末結點後,將末結點p->next指標指向新結點newnode,新結
//點newnode->next指向null,此時完成新結點的插入,新結點newnode成為末結點。
bool insert_list(linklist head,datatype n)
//刪除結點。對鍊錶遍歷,當找到對應元素結點q時,記錄其直接前驅結點p,將前驅結點的next域p->next指向
//q的直接後繼結點p->next->next,釋放q記憶體,完成刪除工作。
bool remove_list(linklist head,datatype n)
p = p->next;
}printf("remove failed\n");
return false;}
//列印結點。
void show_list(linklist head)
printf("\n");}
//鍊錶逆轉。依次將結點a0,a1,a2,……,an-1移到頭結點作為其直接後繼結點。如圖:
//測試。輸入正數則插入結點,負數則刪除對應結點,最後逆轉鍊錶。
int main(void)
else
}revert_list(l);
printf("revert linklist:\n");
show_list(l);
return 0;
}
資料結構 單鏈表 C語言
單向鍊錶 鍊錶結點通常包含資料域與指標域,資料域用來儲存相關的使用者的資料,指標域用來指向下乙個結點。訪問單向鍊錶,需要從頭部 head 開始單向順序訪問,訪問終結於指標域 next 為null的結點 其儲存方式不同於以往的陣列,按照非連續位址方式儲存。優點 鍊錶長度可以實現動態增長,不必像陣列一樣...
C語言資料結構 單鏈表
單鏈表在資料結構裡十分常見,是一種常見的線性表,下面介紹其性質並用 實現相關功能 單鏈表以鏈結方式儲存資料 1 鍊錶的具體儲存表示為 用一組任意的儲存單元來存放線性表的結點 這組儲存單元既可以是連續的,也可以是不連續的 鍊錶中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存...
C語言資料結構(單鏈表)
單鏈表的整表建立 對於順序儲存結構的線性表的整表建立,我們可以用陣列的初始化來直觀理解。而單鏈表和順序儲存結構就不一樣了,它不像順序儲存結構這麼集中,他的資料可以是分散在記憶體各個角落的,他的增長也是動態的。對於每個單鏈表來說,他所占用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際...