迴圈單鏈表和單鏈表的區別在於,表中的最後乙個結點的指標不是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...