通過指標將資料連線起來
整個資料結構中,很重要的一點是,初始化和銷毀對應,插入和刪除對應,有malloc(new)有free(delete),一定要對應。
鍊錶的各項操作,最關鍵的,其實就是找到被操作元素的上乙個元素,插入位置的上乙個元素,或者要刪除元素的上乙個元素,這都是非常關鍵的,同時也要注意,
鍊錶有個最大的特點,就是頭指標所指向的位置,不放任何元素
靜態鍊錶和動態鍊錶中,都是手動插入元素,而且程式設計人員是知道要插入資料的資料型別的,靜態鍊錶可操作性較差,動態鍊錶比較靈活,但是二者總體上都無法完成封裝,總歸還是面對過程變成
關於鍊錶更加具有適應性和更加詳細的說明見:
資料結構:單向鍊錶:
其中對各個部分的講解比較詳細,以下程式都比較簡單,整個鍊錶的基本思想也如上圖所示。
大小固定,插入元素是固定的。一般會設定乙個元素為使用者自定義型別的陣列,大小是固定的。
例如:
下面的程式顯然沒有這麼做,只是在思想上重現了靜態鍊錶#define max 1000
typedef struct staticlist
sl;sl test[max];
(圖源:《大話資料結構》)
.h
.cpp//靜態鍊錶
struct linkcontentstatic
;
輸出: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
.cppstruct 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);
具體執行內容://初始化
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指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶。陣列的第...