靜態鍊錶的實現 部分完善

2021-06-23 05:06:39 字數 1708 閱讀 2786

舉個例子:

假設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個元...