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

2022-08-19 06:45:08 字數 1931 閱讀 7969

//順序棧資料結構c++類宣告(基類)

template class sqstack

;

templateclass 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()

cout

assert(base!=0);

top=base;

stacksize=n;

for (int j = 0; j < n; j++)

*(base+j)=elem[j];

top=base+n;

cout

<<"隨機產生的棧為:"

cout

<<" "

<<*(base+i);

cout

<<" ♂";

for (int i = 1; i 4);

cout

<<" ";

}cout

<<" ♂"

<<" base";

for (int i = 1; i 4);

cout

<<" ";

}cout

<<" top"

void mystack::display()

cout

<<" ♂"

<<" base";

for (int i = 1; i 4);

cout

<<" ";

}cout

<<" top"

template

void linkstack::display()

cout

cout

<4)<<" ";

cout

<<"↑" ;

cout

cout

<4)<<" ";

cout

<<"top"

void linkstack::randlinkstack()

cout

top=p;

cout

<<"the stack produced is:"

r=top;

while (r)

cout

cout

<4)<<" ";

cout

<<"↑" ;

cout

cout

<4)<<" ";

cout

<<"top"

<}

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

c 中棧有順序棧和鏈棧之分,在順序棧中,定義了棧的棧底指標 儲存空間首位址base 棧頂指標top以及順序儲存空間的大小stacksize 個人感覺這個資料成員是可以不用定義的 順序棧資料結構c 類宣告 基類 template class sqstack 而對於鏈棧來說,它只定義棧頂指標。templ...

順序棧和鏈棧

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

棧,順序棧,鏈棧

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