資料結構 靜態鍊錶和動態鍊錶

2021-10-03 06:23:10 字數 3975 閱讀 1137

通過指標將資料連線起來

整個資料結構中,很重要的一點是,初始化和銷毀對應,插入和刪除對應,有malloc(new)有free(delete),一定要對應。

鍊錶的各項操作,最關鍵的,其實就是找到被操作元素的上乙個元素,插入位置的上乙個元素,或者要刪除元素的上乙個元素,這都是非常關鍵的,同時也要注意, 

鍊錶有個最大的特點,就是頭指標所指向的位置,不放任何元素

靜態鍊錶和動態鍊錶中,都是手動插入元素,而且程式設計人員是知道要插入資料的資料型別的,靜態鍊錶可操作性較差,動態鍊錶比較靈活,但是二者總體上都無法完成封裝,總歸還是面對過程變成

關於鍊錶更加具有適應性和更加詳細的說明見:

資料結構:單向鍊錶:

其中對各個部分的講解比較詳細,以下程式都比較簡單,整個鍊錶的基本思想也如上圖所示。

大小固定,插入元素是固定的。一般會設定乙個元素為使用者自定義型別的陣列,大小是固定的。

例如:

#define max 1000

typedef struct staticlist

sl;sl test[max];

下面的程式顯然沒有這麼做,只是在思想上重現了靜態鍊錶 

(圖源:《大話資料結構》)

.h

//靜態鍊錶

struct linkcontentstatic

;

.cpp 

linkcontentstatic node1 = ;

linkcontentstatic node2 = ;

linkcontentstatic node3 = ;

linkcontentstatic node4 = ;

linkcontentstatic node5 = ;

linkcontentstatic node6 = ;

node1.next = &node2;

node2.next = &node3;

node3.next = &node4;

node4.next = &node5;

node5.next = &node6;

//如何遍歷這個鍊錶

linkcontentstatic * pcurrent = &node1;

while(pcurrent!=nullptr)

輸出:

元素也是提前插入的,操作過程中也可以選擇插入元素,刪除元素等操作

鍊錶有個最大的特點,就是頭指標所指向的位置,不放任何元素

.h

struct linknode

;//初始化

linknode * init_dynamic();

//在oldval後面插入乙個newval

void insertbyvalue_dynamic(linknode * header,int oldval,linknode * newval);

//刪除val的鍊錶

void remove_dynamic(linknode * header,int delvalue);

//遍歷

void foreach_dynamic(linknode * header);

//銷毀

void destroy_dynamic(linknode * header);

//清空

void clear_dynamic(linknode * header);

//大小

int size_dynamic(linknode * header);

.cpp

//初始化

linknode * init_dynamic()

//在oldval的位置插入乙個newval,old資料在new後面

void insertbyvalue_dynamic(linknode * header,int oldval,linknode * newval)

pfind = pfind->next;

place++;//old 的 前乙個元素的位置

}//如果找到了要找的元素,則進行插入操作

if(flag == false)

linknode * temp= pcurrent->next;//old所在的位置

pcurrent->next = newval;

newval->next = temp;

}else

}//刪除值為val的鍊錶

void remove_dynamic(linknode * header,int delvalue)

pfind = pfind->next;

place++;//最後值就是要刪除元素前乙個元素的位置

}if(flag == false)//確保有找到這要刪除的變數

del = pcurrent->next;

pcurrent->next = del->next;

del->next = nullptr;

}else

}//遍歷

void foreach_dynamic(linknode * header)

}//清空

void clear_dynamic(linknode * header)//接觸鍊錶的所有next指標指向即可,從頭向尾解除

else

}}//大小

int size_dynamic(linknode * header)

return size;

}//銷毀

void destroy_dynamic(linknode * header)

具體執行內容: 

//動態鍊錶

大小插入都是靈活的

資料結構鍊錶 靜態鍊錶

1 在這裡我們首先要複習一下鍊錶c語言的定義 這看起來很簡單,但實際上至關重要!data域 存放結點值的資料域。next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 也就是說next域儲存的是乙個位址,這個位址是下一節點的位址。注意 鍊錶通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈結在一...

靜態鍊錶和動態鍊錶

鍊錶分為兩種 動態和靜態 動態的結合相關函式能動態開闢記憶體,特點就是不會浪費記憶體單元 靜態鍊錶則沒有這個優點。靜態鍊錶和動態鍊錶是線性表鏈式儲存結構的兩種不同的表示方式。靜態鍊錶的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指標。動態鍊錶是相對於靜態鍊錶而言的,一般地,在描...

資料結構 靜態鍊錶

首先我們讓陣列的元素都是由兩個資料域組成,data和cur。也就是說,陣列的每乙個下標都對應乙個data和乙個cur。資料域data用來存放資料元素,也就是通常我們要處理的資料 而游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶。陣列的第...