線性表的鏈式表示 迴圈單鏈表(C )

2021-10-06 17:05:36 字數 2127 閱讀 2517

迴圈單鏈表和單鏈表的區別在於,表中的最後乙個結點的指標不是null,而改為指向頭結點,從而整個鍊錶形成乙個環。

迴圈單鏈表可以從表中任意乙個結點開始遍歷整個鍊錶。不僅可以設定頭指標,還可設定尾指標,對於表頭與表尾進行操作都只需要o(1)的時間複雜度

迴圈單鏈表中結點型別的描述如下:

typedef

struct rnode rnode,

* rlinklist;

初始化鍊錶:

rlinklist initlist

(rlinklist& l)

l =new rnode;

l->next = l;

return l;

}

頭插法建立鍊錶

rlinklist headinsert

(rlinklist& l)

return l;

}

尾插法建立鍊錶

rlinklist tailinsert

(rlinklist& l)

return l;

}

按值查詢操作

int

locateelem

(rlinklist l, elemtype e)

if(s == l)

else

}

按位查詢操作

elemtype getelem

(rlinklist l,

int i)

if(i ==1)

return s-

>next-

>data;

}

插入操作

bool

insertlist

(rlinklist& l,

int i, elemtype e)

int j =1;

rnode* s =

new rnode;

rnode* p =

new rnode;

s = l-

>next;

while

(j < i -

1&& s != l)

p->data = e;

p->next = s-

>next;

s->next = p;

return

true

;}

刪除操作

bool

listdelete

(rlinklist& l,

int i, elemtype& e)

rnode* s,

* p;

int j =1;

s = l-

>next;

while

(i < j -

1&& s-

>next != l)

p = s-

>next;

if(p == l)

e = p-

>data;

s->next = p-

>next;

free

(p);

return

true

;}

遍歷

void

printlist

(rlinklist l)

cout << endl;

}

銷毀表

bool

destorylist

(rlinklist& l)

rnode* s =

new rnode;

while

(l->next != l)

return

true

;}

表中元素個數

int

length

(rlinklist l)

return i;

}

線性表的鏈式表示(單鏈表)

鍊錶的好處在於插入和刪除元素時只需改變指標的指向,減少操作次數。鍊錶的儲存結構可以是順序的 靜態鍊錶 也可以是無序的。缺點是隨機訪問時需要遍歷整個表。本文用無序的儲存結構實現了單鏈表。線性表的鏈式表示 單向鍊錶 lovesunmoonlight include include include inc...

線性表的鏈式表示 雙鏈表(C )

由於單鏈表結點中只有乙個指向其後繼的指標,使得單鏈表只能從頭結點依次順序地向後遍歷。訪問後繼結點的時間複雜度為o 1 訪問前驅節點的時間複雜度為o n 為了克服單鏈表的上述缺點,引入了雙鏈表,雙鏈表結點中有兩個指標prior和next,分別指向其前驅節點和後繼結點,使得訪問前後結點的時間複雜度都為o...

線性表的鏈式表示

上篇文章是線性表的順序表示,本篇便是線性表的鏈式表示。主函式的步驟包括,輸入線性表資料,對鍊錶的刪除,插入。利用指標進行對鍊錶的訪問。同時為了增加程式可讀性,將結構體定義為lnode,linklist。include 線性表的鏈式表示 using namespace std typedef stru...