線性表 棧和佇列

2022-08-13 23:42:19 字數 2095 閱讀 6093

一、線性表(list)

1、定義:有序、有限的資料序列,其中的每個資料稱為元素(element)。

2、基本概念:空(empty)、長度(length)、頭(head)、尾(tail)、有序表(sorted list)、無序表(unsorted list)

3、基本操作:初始化、插入、刪除、訪問、修改

4、用抽象類(abstract base class)表示:

template class

list

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:public

list

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 ...