舉個例子:
假設max_size = 3;
那麼初始化之後 陣列的cur情況就是
space[0].cur=1, space[1].cur=2,space[2].cur=0;
當插入乙個節點後則陣列的cur情況就變成了 space[0].cur=2, space[1].cur=0, space[2].cur=1; 因為只有乙個空間所以肯定是space[1]被存放新節點, 然而此時我們會發現空間已經用盡了,但是這時候你再去嘗試malloc,即去新增下的節點插入。此時因為space[0]是維護空閒佇列,但是此時space[0].cur == 2,按道理來講它應該是0才對。這樣2就被當成空閒節點進行了操作,更可氣的是,space[2]被覆蓋後會這樣,space[2].cur=2 , so, 不多說了.........................
以下部分是自己的**實現,原因是覺得原文中有部分處理的不合理的部分做了相關 修改,有不妥的地方煩請指點。
#include #define maxsize 10
typedef int datatype;
enum;
typedef struct node
staticlinklist[maxsize];
// 初始化靜態鍊錶
int initstaticlinklist(staticlinklist list)
// 為需要新增的節點申請位置
int mallocspace(staticlinklist list)
// 取得鍊錶長度
int length(staticlinklist list)
return len;
}// 在第pos個節點前插入節點val
int push(staticlinklist list, int pos, datatype val)
int index = mallocspace(list);
if (!index)
int key = maxsize-1;
list[index].data = val;
for (int i = 0; i < pos-1; i++)
key = list[key].cur;
list[index].cur = list[key].cur;
list[key].cur = index;
return ok;
}// 歸還釋放的節點資訊
void freespace(staticlinklist list, int idx)
void print(staticlinklist list)
std::cout << std::endl;
}// 刪除第pos個節點
int pop(staticlinklist list, int pos)
int key = maxsize-1;
for (int i = 0; i < pos-1; i++)
int delidx = list[key].cur;
list[key].cur = list[delidx].cur;
freespace(list, delidx);
return ok;
}
space[0].cur = 1
space[1].cur=2
space[2].cur = 0
space[0].cur = 1
靜態鍊錶的實現
include include define size 6 define struct of static list typedef struct stlist stlist 初始化靜態鍊錶分配空間大小為size個 stlist initlist stlist tempptr of for i in...
靜態鍊錶的實現
用陣列來代替指標,來描述單鏈表 將陣列元素分成兩個資料域,data和cur。data用來存放資料元素,cur存放該元素的後繼在陣列中的下標 游標 游標實現法 線性表的靜態鍊錶儲存結構 define maxsize 1000 typedef struct component,staticlinklis...
靜態鍊錶的實現
2018 8 23 21 35 靜態鍊錶的實現 陣列中第乙個結點表示備用鍊錶的第乙個結點 陣列中最後乙個結點表示鍊錶的第乙個結點 當next域為0時均代表到了當前鍊錶的結尾,因此有兩個陣列單元 0與max 1 無法儲存目標資料 include define max 10 此時靜態鍊錶中只能儲存8個元...