C++ 資料結構與算法 -- 一。線性表 --1. 線性表的存儲結構

一、順序表

1

二、單鏈表(Single Linked List)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 單鏈表的節點定義 
template<class T>
struct LinkNode
{
T data;
LinkNode<T> *next;
LinkNode (LinkNode<T> *ptr = NULL){next = ptr;}
LinkNode (const T &item, LinkNode<T> *ptr = NULL)
{
next = ptr;
data = item;
}
};

// 帶頭節點的單鏈表定義
template<class T>
class LinkList
{
public:
// 無參數的構造函數
LinkList (){head = new LinkNode<T>;}
// 帶參數的構造函數
LinkList (const T &item){head = new LinkNode<T>(item);}
// 複製構造函數
LinkList (LinkList<T> &List);
// 析構函數
~LinkList (){Clear ();}
// 重載函數:賦值
LinkList<T>& operator=(LinkList<T> &List);
// 定位指定的位置,返回該位置上的節點指針
LinkNode<T>* Locate (int pos);
// 在指定位置 pos 插入值为 item 的節點,失敗返回 false
bool Insert (T &item, int pos);
// 删除指定位置 pos 上的節點,item 就是該節點的值,失敗返回 false
bool Remove (int pos, T &item);
// 鏈表清空
void Clear ();
// 獲取鏈表長度
int Length () const;
// 打印鏈表
void Print () const;
// 獲取鏈表頭節點
LinkNode<T>* GetHead () const;
// 設置鏈表頭節點
void SetHead (LinkNode<T> *p);
// 查找數據的位置,返回第一個找到的滿足該數值的節點指針
LinkNode<T>* Find (T &item);
// 獲取指定位置 pos 的節點的值,失敗返回 false
bool GetData (int pos, T &item);
// 設置指定位置 pos 的節點的值,失敗返回 false
bool SetData (int pos, T &item);
// 判斷鏈表是否為空
bool IsEmpty () const;
// 鏈表排序
void Sort ();
// 鏈表逆置
void Reverse ();
private:
LinkNode<T> *head;
};

三、靜態表

1

二、棧(Stack)

三、隊列(Queue)

四、串(String)

五、陣列(Array)

六、廣義表(Generalize List)