企業級資料結構之 順序表的連式儲存

2021-06-28 06:33:32 字數 4000 閱讀 4307

鏈式儲存定義

為了表示每個資料元素與其直接後繼元素之間的邏輯關係,每個元素除了儲存本身的資訊外,還需要儲存指示其直接後繼的資訊。

表頭結點

鍊錶中的第乙個結點,包含指向第乙個資料元素的指標以及鍊錶自身的一些資訊

資料結點

鍊錶中代表資料元素的結點,包含指向下乙個資料元素的指標和資料元素的資訊

尾結點鍊錶中的最後乙個資料結點,其下一元素指標為空,表示無後繼。

在c語言中可以用結構體來定義鍊錶中的指標域,

鍊錶中的表頭結點也可以用結構體實現

帶頭結點、位置從0的單鏈表

返回鍊錶中第3個位置處,元素的值

linklistnode* linklist_get(linklist* list, int pos)

current = (linklistnode *)tlist;

for (i=0; inext;

}ret = current->next;

return ret ;

}

返回第三個位置的

移動pos

次以後,當前指標指向**?

答案:指向位置2

,所以需要返回 

ret = current->next;

備註:迴圈遍歷時, 遍歷第1

次,指向位置0

遍歷第2

次,指向位置1

遍歷第3

次,指向位置2

遍歷第n

次,指向位置

n-1;

所以如果想返回位置n

的元素的值,需要怎麼做

ret = current->next;

此問題是:指向頭結點的指標移動n

次 和 第

n個元素之間的關係?

刪除元素

優點:無需一次性定製鍊錶的容量

插入和刪除操作無需移動資料元素

缺點:資料元素必須儲存後繼元素的位置資訊

獲取指定資料的元素操作需要順序訪問之前的元素

程式演示:(此程式實現演算法與程式型別分離)

標頭檔案 

#ifndef _zeng_

#define _zeng_

typedef void linklist;

//注意該結構體位址等於&next位址

typedef struct xiaozeng

linklistnode;//結點

//建立頭結點

linklist *linklist_create();

//銷毀鍊錶

void linklist_destroy(linklist *list);

//鍊錶清空

void linklist_clear(linklist *list);

//獲取鍊錶長度

int linklist_length(linklist *list);

//插入結點位址

void linklist_insert(linklist *list, linklistnode *node, int pos);

//得到結點位址

linklistnode *linklist_get(linklist *list, int pos);

//得到刪除結點位址

linklistnode *linklist_delete(linklist *list, int pos);

#endif

實現.c

#include"1.h"

#include#include#includetypedef struct _zzzz

tlinklist;

//建立鍊錶

linklist *linklist_create()

ret->length = 0;//初始化為空

ret->header.next = null;

return ret;//返回頭結點位址

}//銷毀結點

void linklist_destroy(linklist *list)

free(tmp);//釋放記憶體

}//鍊錶清空

void linklist_clear(linklist *list)

tmp->length = 0;//長度置0

tmp->header.next = null;

return;

}//獲取鍊錶長度

int linklist_length(linklist *list)

return tmp->length;//返回長度

}//插入結點 //表頭 //插入結點 //位置,從0號開始

void linklist_insert(linklist *list, linklistnode *node, int pos)

//容錯性,使得不斷為空

if (pos>linklist_length(list))

for (int i = 0; i < pos && (current->next != null); i++)

//現在current指向pos前乙個結點

node->next = current->next; //先將前乙個結點儲存的位址賦值給node->next

current->next = node; //再將node位址賦給current->next;兩步實現插入

tmp->length++; //插入後長度+1

return;

}//獲得指定位置結點位址

linklistnode *linklist_get(linklist *list, int pos)

for (int i = 0; i < pos && (current->next != null); i++)

//現在current指向pos前乙個結點

return current->next;

}//刪除乙個結點並返回該刪除結點位址

linklistnode *linklist_delete(linklist *list, int pos)

for (int i = 0; i < pos && (current->next != null); i++)

linklistnode *bao = current->next;//緩衝儲存

current->next = current->next->next;//刪除該結點,就是把指向該結點變成指向該結點指向的結點

tmp->length--;//長度-1

return bao;//返回其結點

}

主函式

#include#include#include#include"1.h"

typedef struct teacher //即將被插入結點

企業級資料結構 棧的鏈式儲存設計與實現

鏈式棧是一種特殊的鍊錶,下面實現的 是基於鍊錶而來的,請參考前幾篇的部落格 linkstack.h ifndef my linkstack h define my linkstack h typedef void linkstack linkstack linkstack create void l...

資料結構之順序表

首先是標頭檔案seqlist.h ifndef seqlist h define seqlist h include includeusing namespace std define elemtype int define seqlist default size 10 typedef struc...

資料結構之順序表

順序表的思想容易了解,但是 不容易掌握,我這裡根據老師所提供的 進行一下簡單的總結 這個 包含順序表的查詢,插入,刪除,建表,輸出資料 includeusing namespace std define ok 1 define error 0 define overflow 2 typedef in...