資料的儲存結構分為鏈式儲存結構,線性儲存結構。不管什麼型別的資料結構,都會以這兩種儲存方式在計算機中儲存。
線性儲存結構就是開闢一段連續的記憶體(記憶體大小已經確定),將資料儲存在這段連續記憶體中,這種儲存結構的優點是可以快速地取出元素,時間複雜度為o(1)缺點是插入和刪除需要移動大量的元素,時間複雜度為o(n)
鏈式儲存結構是通過一小塊一小塊記憶體連線起來而構成鍊錶。我們開闢一小段記憶體,在記憶體中儲存資料和指向下一塊記憶體的指標,將這些記憶體連線起來。鍊錶的插入和刪除很方便時間複雜度為o(1)但是鍊錶的讀取就要從頭開始,時間複雜度為o(n)
因此這兩種儲存方式各有利弊。
下面我們來說一下鍊錶
例如我們宣告乙個結構體:
struct node
*pnode;
這樣我們就可以使用new為這段記憶體開闢一小段空間
pnode=new node;
鍊錶又分為單鏈表,雙向鍊錶,迴圈鍊錶。
雙向鍊錶還有乙個前驅指標,
typedef
struct dulnode
dulnode,*dulinklist;
迴圈鍊錶的有乙個指標指向尾節點,尾節點的指標指向頭節點。
鍊錶的插入分為頭插法和尾插法,用頭插法構建鍊錶每次都是在頭節點的後面插入節點,尾插法就是每次在新節點的後面插入節點,這兩種插法構建出來的鍊錶不一樣需要注意。
假如我將』a』,』b』,』c』,』d』,』e』,』f』這幾個字元儲存在鍊錶中來看一下頭插法和尾插法的不同。
//頭插法
我們看到使用頭插法輸出資料會相反。
//尾插法
單鏈表的刪除
#include
using
namespace
std;
typedef
struct node
*pnode;
void destroy(pnode,char);
int main()
char a_1='c';
destroy(head,a_1);
pnode m;
m=head->next;
while(m!=nullptr)
}void destroy(pnode h,char a)
q->next=p->next;
delete p;
}
線性表 鍊錶
線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...
線性表 鍊錶
include include typedef int elemtype typedef struct node lnode,linklist linklist createlinklist1 頭插法 linklist createlinklist2 尾插法 void lengthlinklist ...
線性表 鍊錶
1.陣列長度和線性表長度區別?答 陣列的長度是存放線性表的儲存空間的長度,儲存分配後這個量是一般是不變的。有個別同學可能會問,陣列的大小一定不可以變嗎?我怎麼看到有書中談到可以動態分配的一維陣列。是的,一般高階語言,比如c.vb c 都可 人用程式設計手段實現動態分配陣列,不過這會帶來效能上的損耗。...