一、線性表(list)
1、定義:有序、有限的資料序列,其中的每個資料稱為元素(element)。
2、基本概念:空(empty)、長度(length)、頭(head)、尾(tail)、有序表(sorted list)、無序表(unsorted list)
3、基本操作:初始化、插入、刪除、訪問、修改
4、用抽象類(abstract base class)表示:
template classlist
list(
const list &){}
public
: list(){}
virtual ~list(){}
virtual clear() =0
;
virtual
void insert(const e & iteam) = 0
;
;
virtual e remove()=0
;
virtual
void movetostart()=0
;
virtual viod movetoend()=0
;
virtual
void prev()=0;//
向左移動
virtual
void next()=0
;
virtual
int length()const =0
;
virtual
int currpos()const =0
;
virtual
void movetopos()=0
;
virtual
const e& getvalue()const =0;};
5、線性表的實現
(1)陣列表
templateclass alist : public list~alist()
void
clear()
void insert(const e&it)
e remove()
void movetoend()
void prev()
void next()
int length const
int currpos() const
void movetopos(int
pos)
const e& getvalue() const
};
(2)鍊錶(linked list)
各個元素分布在記憶體中不同位置,其中每個元素稱為節點(node),每個節點包括自身的資料和指向下乙個元素(節點)的指標(通常命名為next),因此要訪問某乙個節點只能先訪問其上乙個節點。也就是說訪問其中任意乙個節點都需要從頭開始。
最後乙個節點的指標next需要設定為null。
templateclass llist:publiclist
void
removeall()
}public
: llist(
int size=defaultsize)
~list()
void print() const
;
void
clear()
void insert(const e&it)t,null);
cnt++;
}tail=tail->next;
cnt++;
}e remove()
void movetostart()
void movetoend()
void
prev()
void
next()
int length()const
void movetopos(int
pos)
const e& getvalue()const
};
在以上實現中為了方便查入節點,使指標指向所要指向元素的前乙個節點。
線性表 棧和佇列
線性表是n個元素的有限序列。表示方法有兩種,一種是順序表示,一種是鏈式表示。順序表示即採用一組位址連續的儲存單元依次儲存線性表的資料元素,通常採用陣列來實現 鏈式表示是用一組任意的儲存單元儲存線性表的資料元素,每一結點包含兩個域 資料域和指標域,資料域儲存資料,指標域儲存後繼儲存位址資訊,實現為 i...
線性表 棧 佇列
輔助定義 define maxsize 5 define ok 0 define error 1 typedef int selemtype typedef int status 棧 順序 鏈式 相關結構體定義 順序棧 typedef struct sqstack 順序棧共享空間 typedef s...
線性表 棧,佇列
1.3 棧 棧是一種先進後出的資料結構。只能在一端進行插入和刪除操作的特殊線性表。將資料進入棧稱為壓棧,資料出去稱為彈棧。壓棧 public void push t t 彈棧 public t pop 讓首結點指向第乙個結點的下乙個結點 head.next oldfirst.next 元素個數 1 ...