1. 程式人生 > >第二章學習小結

第二章學習小結

占用 第一個 .com 隨機 alt 後繼 插入 初始 str

這學期一開始,接觸到線性表的時候,其實上課有點懵懵的,畢竟上學期都是學具體的C++語言,而在講線性表的時候轉變為了更抽象的表示方法,但是在具體理解時用C++的類,鏈表去代入理解,我還是有一定收獲的。

首先是線性表的定義啦,這裏可以通過C++中的結構體/類去實現。

先是順序表

#define MAXSIZE 20

typedef int ElemType;
typedef struct
{
ElemType date[MAXSIZE]; //存放順序表中的元素
int length; //存放順序表的長度
}SqList; //聲明順序表的類型


然後是初始化:

void InitList(SqList &L)
{
L.length = 0;
}

順序表的插入

int ListInsert(SqList *L,int i,ElemType e)
{
if(L -> length == MAXSIZE)
return 0;
if(i < 1 || i > length + 1)
return 0;
if(i < L -> length)
{
for( k = L->length; k > i; k--)
L->date[k] = L->date[k - 1];

}
L -> date[i - 1] = e;
L -> length++;
return 1;
}

刪除:

int ListInsert(SqList *L,int i,ElemType e)
{
if(L -> length == MAXSIZE)
return 0;
if(i < 1 || i > length + 1)
return 0;
if(i < L -> length)
{
for( k = L->length; k > i; k--)

L->date[k] = L->date[k - 1];
}
L -> date[i - 1] = e;
L -> length++;
return 1;
}

然後是鏈表

在鏈式存儲結構中,每個結點用於存儲線性表的一個元素,每個結點不僅包含有所存元素本身的信息(稱之為數據域),而且包含有元素之間邏輯關系的信息,即前驅結點包含有後繼結點的地址信息,這稱為指針域,這樣就可以通過前驅結點的指針域方便地找到後繼結點。鏈表由多個結點組成,這些結點的地址可以是連續,也可以不連續,這就是說這些數據元素可以存儲在內存中未被占用的任意位置。

鏈表由如下幾種形式

(1)單鏈表:在每個結點中包含有數據域外,只設置一個指針域,用於指向其後繼結點

技術分享圖片

(2)雙鏈表:在每個結點中包含有數值域外,設置有兩個指針域,分別用於指向其前驅結點和後繼結點

(3)循環鏈表:循環鏈表是另一種形式的鏈式存儲結構。它的特點是表中尾結點的指針域不變,而是指向表頭結點,整個鏈表形成一個環

(4)靜態鏈表:借用一維數組來描述線性鏈表,數組中的一個分量表示一個節點,同時使用遊標代替指針一顯示節點在數組中的相對位置。數組中的第0個分量可以看成頭節點,其指針域指示靜態鏈表的第一個節點。

不過後面這幾種鏈表上課只是提到,自己還沒實踐過,所以只是知道概念的程度而已。

鏈表的特點:由於每個繼節點帶有指針域,因此在存儲空間上比順序表要付出較大的代價,所以順序表比鏈表的存儲密度高。還有鏈表不具有順序表的隨機存取特點,但在鏈表中插入或刪除操作時,只需修改相關節點的指針域即可,不需要移動節點。

嗯上課講例子的時候其實是有點懵的......不過可以通過多看大佬的代碼可以改善自己。

第二章學習小結