#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個數,則按...