資料結構面試之三 棧的常見操作

2021-06-22 13:57:07 字數 4069 閱讀 9898

三、棧的基本操作

3.1

用陣列構造棧

【注意以下幾點】:

1.基於陣列的棧的三要素:1)棧的最大容量maxsize; 2)棧的當前容量=當前棧中元素的個數=棧頂top-1;3)動態陣列儲存棧的元素 type* list;

2.對於出棧、入棧的操作要對應先判斷棧空、棧滿;如果空、滿要有異常處理或錯誤提示。

3.注意入棧push操作,先入棧後top+1;出棧pop則相反,先top-1,再出棧。【注意因為,top指向陣列中最後乙個元素的下乙個位置】。

4.拷貝建構函式和賦值函式要注意,尤其賦值的時候,避免自身賦值、同時要注意大小不一致的不能完成賦值操作,要有相關提示。

[cpp]view plain

copy

template

class

arrstack  

;  template

<

typename

type>  

arrstack::arrstack(int

nsize=100)  

else

}  template

<

typename

type>  

arrstack::~arrstack()  

}  template

<

typename

type>  

arrstack::arrstack(const

arrstack& copystack)  

}  template

<

typename

type>  

arrstack& arrstack::operator=(constarrstack& otherstack)  

else

else

//endfor

return

*this

;  }  

}//end else

}  template

<

typename

type>  

void

arrstack::initializestack()  

template

<

typename

type>  

void

arrstack::destroystack()  

template

<

typename

type>  

bool

arrstack::isstackempty()  

template

<

typename

type>  

bool

arrstack::isstackfull()  

template

<

typename

type>  

void

arrstack::push(

const

type& item)  

else

}  template

<

typename

type>  

void

arrstack::pop(type& poppeditem)  

else

}  3.2

用鍊錶構造棧

鍊錶構造棧注意:

1) 判斷棧空的標記是top==null;由於棧的空間可以動態分配,因此可以認為鏈棧不會滿。

2) 棧的入棧push操作要先判定棧是否已經滿,非滿才可以入棧。先入棧,再調整top指標;

3) 棧的出棧pop操作要先判定棧是否已空,非空才可以出棧。先調整top指標,再出棧,並刪除原結點。

4) 可以加count判定當前結點的個數。

[cpp]view plain

copy

template

<

typename

type>  

struct

nodetype  

;  template

<

typename

type>  

class

linkedstack  

;  template

<

typename

type>  

linkedstack::linkedstack()  

template

<

typename

type>  

linkedstack::~linkedstack()  

//end if

}  template

<

typename

type>  

linkedstack::linkedstack(constlinkedstack& copystack)  

//end while

count =copystack.count;  

}//end if

else

}  template

<

typename

type>  

linkedstack&linkedstack::operator=(const

linkedstack&otherstack)  

//2其他

else

if(otherstack.top!= null)  

//endwhile

count =otherstack.count;  

}//end if

else

return

*this

;  }  

}  template

<

typename

type>  

void

linkedstack::initializestack()  

template

<

typename

type>  

void

linkedstack::destroystack()  

template

<

typename

type>  

bool

linkedstack::isstackempty() 

const

template

<

typename

type>  

bool

linkedstack::isstackfull() 

const

//空間非固定,動態申請!

template

<

typename

type>  

void

linkedstack::push(

const

type& item)  

else

count++;  

cout <" was pushed!"

<< endl;  

}  }  

template

<

typename

type>  

void

linkedstack::pop(type& poppeditem)  

}  template

<

typename

type>  

void

linkedstack::nodecount()  

//上一節的遞迴實現逆向鍊錶列印,這是非遞迴的實現。

template

<

typename

type>  

void

linkedstack::reverseprint()          

//逆向列印的非遞迴實現...

intpoppeditem = 0;  

while

(!isstackempty())  

資料結構 棧的操作

include include define maxsize 100 設順序表的最大長度為100,可依具體情況分配空間 define null 1 typedef int datatype typedef struct datatype stack maxsize int top 棧頂指標 seqs...

常見的基本資料結構 棧

棧adt 棧 stack 是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,叫做棧頂。棧的基本操作有進棧 push 和出棧 pop 前者相當於插入,後者相當於刪除最後的元素。在最後插入的元素可以通過使用top例程在執行pop之前進行考查。對空棧進行的pop或top一般被認為是棧adt的錯誤...

scala資料結構 三 棧

棧主要兩個操作 入棧 push 和出棧 pop 1.子程式的呼叫 在跳往子程式前,會將下個指令的位址存到堆疊中,直到子程式執行完後再將位址取出,回到原來的程式中 2.處理遞迴 和子程式的呼叫類似,只是除了儲存下乙個指定的位址,將引數,區域變數等資料存入堆疊中 3.表示式的轉換與求值 實際解決 計算器...