基本概念:
資料結構的分類:
從邏輯上而言:表示資料元素之間的關係。
從儲存的物理結構,也就是資料在計算機中的儲存形式:
int
*p =
newint
;// 會自動進行進行型別轉換,得到int型別的指標
point *p =
new point[
100]
;//得到乙個陣列指標
delete
p ;//釋放該陣列
delete p ;
// 僅僅釋放指標p所指向的第乙個,而失去其他位置的空間,而無法復用他們
類的封裝過程中包含了private函式以及public函式。為了使另外的類能夠訪問本類的private函式,可以通過友元對其「賦予許可權」。
class
list
;//類的前視說明
class
linknode
class
list
友元的關係不具有對稱性。這裡,linknode類中生命了list是它的友元,**list的所有成員都可以直接使用linknode的私有成員,反之,linknode則不能。
單鏈表的儲存結構
typedef
struct node
;
單鏈表的插入與刪除
插入:在表的第乙個節點;插入在首尾節點;插入在尾節點。
刪除:刪除第乙個節點;刪除中間或尾部。
整表建立
舉例:前插入法
for (int i = 0; i < count; i++)
整表刪除
status clearlist
(linklist *l)
return ok ;
}
鍊錶需要進行指標操作,那麼能不能將這種指標的方式來進行通用化,使一些沒有指標的程式語言也能利用這種操作呢。這裡可以利用陣列。
讓陣列的元素由兩個資料域組成,data與cur。資料域用來表示data,cur來表示next指標,存放該元素的下乙個陣列在陣列中的位置,稱cur為游標。用陣列來描述的鍊錶叫做靜態鍊錶。
// 代表棧內的乙個元素
typedef
struct stacknodestacknode,
*linkstackptr;
typedef
struct linkstack
//example
// 在棧中插入元素
bool
push
(linkstack *s, elemtype e)
//同理,有出棧操作為(將棧頂值返回為e並刪除棧頂)
bool
pop(linkstack *s, elemtype *e)
佇列中,如果資料要進行頻繁的出隊入隊操作,鏈式結構可能需要頻繁的進行記憶體分配等操作,帶來很大的開銷。
迴圈佇列就很適合這樣的問題,它的主要特點在於:定義了佇列的maxsize,以及由兩個指標來指示佇列中資料。
下面給出構造迴圈佇列的類的**。
class
sqqueue
;
佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它能尾進頭出罷了。
下面給出鏈佇列的結構。這個需要定義兩個東西,其一是佇列中每乙個element結構的定義,按照鏈式佇列,中間的每乙個元素都包含了資料部分以及指標部分。其二則是佇列結構的定義,佇列是有許多個element組成的,有許多的成員函式,以及有頭指標和尾指標。佇列元素可用用class定義或者struct結構體進行定義,這裡,我均採用class來定義
template
<
class
t>
class
qnode
;template
<
class
t>
class
linkqueue
;//佇列的初始化
void linkqueue::
initqueue
(linkqueue *q)
樹的儲存結構
雙親表示法
孩子表示法
孩子兄弟表示法
C 資料結構
c 中實現通用資料結構 在程式設計當中經常會出現使用同種資料結構的不同例項的情況。例如 在乙個 程式中可以使用多個佇列 樹 圖等結構來組織資料。同種結構的不同例項,也 許只在資料元素的型別或數量上略有差異,如果對每個例項都重新定義,則非常麻 煩且容易出錯。那麼能否對同種型別資料結構僅定義一次呢?答案...
資料結構 C
本文將根據自己對資料結構的理解,介紹資料結構的基本型別 鍊錶。寫的不好的地方歡迎指正。首先是單鏈表。結點資料結構定義 struct node return false 3 刪除元素 bool delete node first,int x 現在介紹雙鏈表 首先也是結點結構定義 struct node...
C 資料結構
c c 陣列允許定義可儲存相同型別資料項的變數,但是結構是 c 中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性 為了定義結構,您必須使用struct語句。struct 語句定義了乙個包含多個成...