#ifndef adt_h
#define adt_h
//線性表adt
template class list //賦值運算子
list(const list&){} //複製建構函式
public:
list(){} //預設建構函式
virtual ~list(){} //析構函式
//清空所有元素
virtual
void clear() = 0;
//在當前位置插入元素item
virtual
void insert(const e& item) = 0;
//list尾部新增乙個元素
virtual
//刪除並返回當前位置的元素
virtual e remove() = 0;
//設定當前位置為list的開始位置
virtual
void movetostart() = 0;
//設定當前位置為list的末尾位置
virtual
void movetoend() = 0;
//當前位置左移乙個位置,不改變元素
virtual
void prev() = 0;
//當前位置右移乙個位置,不改變元素
virtual
void next() = 0;
//返回元素數量--即獲取長度
virtual
int length() const = 0;
//返回當前元素位置
virtual
int currpos() const = 0;
//設定當前位置
virtual
void movetopos(int pos) = 0;
//獲取當前元素
virtual
const e& getvalue() const = 0;
};#endif
#include "adt.h"
template
class alist : public list
~alist() //析構函式
void clear()
//在當前位置插入 it 元素
void insert(const e& it)
//末尾新增元素
assert(listsize < maxsize, "list capacity exceeded");
listarray[listsize++] = it;
}//刪除並返回當前位置的元素
e remove()
void movetostart() //位置重置為start位置
void movetoend() //位置重置為end位置
void prev(); //上乙個元素位置
void next(); //下乙個元素位置
//返回list元素個數
int length() const ;
//返回當前元素位置
int currpos() const ;
//設定當前list位置為 pos
void movetopos(int pos)
//獲取當前位置元素
const e& getvalue() const
};
#include
"adt.h"
//單鏈表結點定義
template
class link
link(link
* nextval =
null)
};template
class llist: public
list
//清空所有元素
void removeall()
}public:
llist(int size = de****esize) //建構函式
~llist() //析構函式
void print() const; //print list
void clear() //clear list
void insert(const e& it)
tail = tail->next =
newlink
(it, null);
cnt++;
}e remove()
//移動至鍊錶開始位置
void movetostart()
//移動至鍊錶尾端
void movetoend()
//上乙個節點
void prev()
curr = temp;
}//下乙個節點
void next()
//返回長度
int length() const
//鍊錶當前位置
int currpos() const
return i;
}//移動至鍊錶的pos位置
void movetopos(int pos)
//獲取當前元素
const e& getvalue() const
};
空間方面:
順序表的缺點:大小事先固定。雖然便於分配空間,但是元素只有少數的幾個時造成空間的浪費。
鍊錶的優點:只有實際在鍊錶中的物件需要空間,只要存在可用的記憶體空間分配,鍊錶中元素的個數沒有限制。
隨機訪問元素:
取出線性表中第i個元素這樣的按位置隨機訪問,使用順序表更快些;通過next和prev可以很容易調整當前位置向前或向後,這兩種操作需要的時間為o(1)。
相比之下,單鏈表不能直接訪問前面的元素,按位置只能從表頭(或者當前位置)開始,直到找到那個特定的位置。假定表中每個位置是由prev和movetopos平均訪問到的,那麼訪問線性表第i個元素的操作所需的平均情況下時間和最差情況下時間都是o(n)。
插入和刪除元素:
給出指向鍊錶中合適位置的指標後,insert和remove函式所需要的時間僅為o(1)。
而順序表必須在陣列內將其餘元素向前或向後移動。這種方法所需的平均情況下時間和最差時間均為o(n)。
對於許多應用,插入和刪除是最主要的操作,因此他們的時間效率是舉足輕重的。僅就這個原因而言,鍊錶往往比順序表更好。
線性表的兩種實現
最近新學了資料結構的線性表,這裡先簡單的介紹一下。線性表是最基本 最簡單 也是最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的 注意,這句話只適用大部分線性表,而不是全部。比如,迴圈鍊錶邏輯層次上也是一種線性表 儲存層次上...
線性表(順序表 鍊錶)
在程式中,經常需要將一組 通常是同為某個型別的 資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們傳進傳出函式等。一組資料中包含的元素個數可能發生變化。對於這種需求,最簡單的解決方案就是將這樣一組元素看成乙個序列,用元素在序列裡的位置和順序,表示實際應用中的某種有意義的資訊,或者表示資料...
C語言,線性表 順序表 鍊錶
c語言資料結構中兩個常見的線性表,用來儲存資料等 一 建立順序表 定義 將線性表中的元素相繼存放在乙個連續的儲存空間中。可利用一維陣列描述儲存結構 特點 線性表的順序儲存方式 遍歷 順序訪問,可以隨機訪問 順序表 include define maxsize 100 定義陣列長度 define ok...