C 棧學習 順序棧和鏈棧的區別

2022-04-01 15:41:57 字數 904 閱讀 6235

c++中棧有順序棧和鏈棧之分,在順序棧中,定義了棧的棧底指標(儲存空間首位址base)、棧頂指標top以及順序儲存空間的大小stacksize(個人感覺這個資料成員是可以不用定義的)//順序棧資料結構c++類宣告(基類)

template

class sqstack

;而對於鏈棧來說,它只定義棧頂指標。template

class linkstack

; typedef linknode * nodepointer;

public:

void clear();

int getlength();

void display();

void randlinkstack();

linkstack operator = (linkstack rights);

protected:

nodepointer top;

};其實這二者的區別是由順序表和煉表的儲存結構決定的,在空間上,順序表是靜態分配的,而鍊錶則是動態分配的;就儲存密度來說:順序表等於1,而鏈式表小於1,但是鏈式表可以將很多零碎的空間利用起來;順序表查詢方便,鏈式表插入和刪除時很方便。

順序表的這種靜態儲存的方式,決定了必須至少得有首位址和末位址來決定乙個空間,否則,不知道查詢到哪了;鏈式表每個節點儲存了下乙個節點的指標資訊,故,對於鏈棧來說,只需要乙個top指標即可查詢到整個棧。

另外,順序棧和鏈棧的top指標有區別,順序棧的top指標指向棧定的空元素處,top-1才指向棧定元素,而鏈棧的top指標相當於鍊錶的head指標一樣,指向實實在在的元素。

另外附自己寫的順序棧和鏈棧的隨機產生函式:

//順序棧:

template

void mystack::randstack()

top=p;

cout

C 棧學習 順序棧和鏈棧的差別

順序棧資料結構c 類宣告 基類 template class sqstack templateclass linkstack typedef linknode nodepointer public void clear int getlength void display void randlink...

順序棧和鏈棧

順序棧的儲存結構 define maxsize 100 typedef struct sqstack 順序棧的初始化操縱就是為順序棧動態分配乙個預訂大小的陣列空間 選乙個大小合適的桶 void initstack sqstack s 入棧操作就是指在棧頂插入乙個新的元素,新的元素為棧頂元素 給桶裡放...

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...