陣列模擬鍊錶的實現

2021-08-30 06:00:08 字數 2399 閱讀 8925

#pragma once

/** *原理很簡單,將陣列的元素看成是鍊錶,或者說是陣列空間起到了記憶體池的作用。然後用兩個結點表示

*當前使用/空閒的鍊錶

* *對效率問題上的一些說明

*增:這個無需說,鍊錶直接秒殺。

*刪:類裡提供的是乙個element結構,裡面包含了使用者的資料。如果你想保持常量的效率

*在一些資料介面提供是,也必須用element,這樣才能記住結點資訊。否則你可以單開個你自己資料型別的介面

*但是在刪除時,就必須遍歷(刪除方法見提供的例項)

*element型別的快速使用:typedef clistwitharray::element clistwitharray_t;

*你維護好clistwitharray_t就行

*提供以下介面

* bool add(llist_t* e); //返回乙個表示是否插入成功的標誌。

* llist_t* erase(); //取的結點的下乙個元素,並且原煉表中刪除

* 將next提供給使用者,無需太多的其他介面,可以滿足大部分要求

**/namespace list_with_array

; private:

element elementdata[llist_size];//陣列空間

element freeelement; //空餘的指標鏈頭

element useelement; //當前使用的指標鏈頭

//function

public:

clistwitharray();

bool add(const llist_t e);

element* erase(element *p)

element* getlisthead()

/***資訊的一些監控

**/int getsumuseelement()

return sum;

} int getsumfreeelement()

return sum;

} private:

/***初始鍊錶串,雙指標鍊錶

**/void initlist();

element* mallocelement();

element* releaseelement(element *p);

/***將乙個結點加入到目的鍊錶

**/void addnodetolist(element* const pnode, element* const pdeslist)

pdeslist->pnext = pnode;

} };

/***這裡是大函式體定義

**/template clistwitharray::clistwitharray()

template void clistwitharray::initlist()

//從free鏈中脫出,頭部

element* p = freeelement.pnext;

freeelement.pnext = freeelement.pnext->pnext;

//空運的狀態

p->ppre = null;

p->pnext = null;

addnodetolist(p, &useelement);

return p;

} template typename clistwitharray::element* clistwitharray::releaseelement( element *p)

//空運狀態

p->ppre = null;

p->pnext = null;

addnodetolist(p, &freeelement);

return presult;

} template bool clistwitharray::add(const llist_t e)

else

}};/*

使用方法

#include "clistwitharray.h"

using namespace std;

using namespace list_with_array;

clistwitharraylisttest;

typedef clistwitharray::element clistwitharray_t;

void cout_listinfo()

p=p->pnext;

} }void test_del_2()

p=p->pnext; }}

void test_add_1() }

void test_add_2() }

int _tmain(int argc, _tchar* argv)

*/

陣列模擬實現鍊錶

為什麼不寫成struct?因為寫法麻煩,效率低。體現在每次需要new乙個記憶體,new的過程非常耗時,可能1s的時間會畫在new上面 直接上 看著 解釋好了 const int n 1e5 5 int a n idx,head 事先申請一塊大小為 n 的int型別的記憶體 idx 模擬申請一塊記憶體...

陣列模擬鍊錶

單鏈表 include using namespace std int head 1 idx 0,e 100005 ne 100005 void add head int x void remove int k void add int k,int x intmain else if a d 刪除元...

陣列模擬鍊錶

單鏈表 實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按...