三、棧的基本操作
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.表示式的轉換與求值 實際解決 計算器...