スタックのC ++言語のシーケンス
書くためにC言語で注文スタックの時間を、私はをご紹介しなければならないスタックの特性、およびスタック操作を紹介し、関連するアルゴリズムを実装するために使用するC言語。小扁は、ブラッシュアップするために継続する必要性を確認するために私のブログに行くことができますをご紹介するためにここではありません。このブログでは、私は、スタックの順序を実装するために、以下の機能の主な成果をC ++テンプレートクラスを使用して、あなたと関連する操作を共有します:
プライベートメンバーのパッケージ
特性の積層順序は、カプセル化要素を、スタック配列要素が格納されているように、トップ代表スタックポインタ、maxSizeのまたカプセル化の代表的なスタックの最大容量overflowProcess()オーバーフロースタックを処理する機能。
private:
T* elements;//存放栈中元素的数组
int top;//栈顶元素的指针
int maxSize;//栈的最大容纳元素个数
void overflowProcess();//栈的溢出处理操作
overflowProcess()関数は次のように実装されている
場合には、完全なスタック拡張するスタックの2倍の最大容量の容量及び配列要素に割り当てられたスペースの再割り当てに従っています。
template <class T>
inline void Stack<T>::overflowProcess()
{
this->maxSize = int (2*this->maxSize);
T * temp = new T [this->maxSize];
for(int i = 0; i <= this->top ; i++){
temp[i] = this->elements[i];
}
delete []elements; //释放原来的空间
this ->elements = temp;
}
パッケージの公開機能
自然と最終的には、上のスタック进栈,出栈,判空,判满
およびその他の関連する操作は、次の説明をご覧ください導入されました。
引数なしのコンストラクタ
10のデフォルトの最大容量は、それ自体を調整することができます。
template<class T> Stack<T>::Stack()
{
this ->maxSize = 10;
this ->top = -1;
this ->elements = new T[this ->maxSize];
if(elements==NULL){
cout<<"动态分配错误!"<<endl;
}
}
そこ引数コンストラクタ
収納スペースのサイズを割り当てるために彼らの転送サイズによると、
template <class T>
inline Stack<T>::Stack(int size)
{
this ->maxSize = size;
this ->top = -1;
this ->elements = new T[this ->maxSize];
if(elements==NULL){
cout<<"动态分配错误!"<<endl;
}
}
スタック「プッシュ」操作のシーケンス
積層操作の前に、第一のスタックisFull()、オーバーフロープロセスは、それ以外の場合は、スタックの最上部に挿入されている場合、スタックは、オーバーフローするかどうかを決定しなければなりません。
template <class T>
inline void Stack<T>::Push(const T &x)
{
if(isFull()==true){
cout<<"The stack is full , so need to enlarge 2x!"<<endl;
overflowProcess();//溢出处理,调整空间大小
elements[++top]=x;
}
else{
elements[++top]=x;//将x入栈
}
}
スタックの順序は、操作を「ポップ」
スタックから先頭要素、スタックが空の戻りfalseの場合、スタックのスタックが空でない場合は、最上位要素は、トップポインタがOKに1ずつデクリメントされます。
template <class T>
inline bool Stack<T>::Pop(T& x)
{
if(isEmpty())return false;
else{
x=getTopelements();
top--;
return true;
}
}
順スタック「フルセンテンスを。」
フル、フルリターンfalseの場合、真のリターンを比較するだけで、トップポインタと行の最大容量に、スタックが満杯であるかどうかを確認
template <class T>
inline bool Stack<T>::isFull()
{
if(this->getTop()<this->getMaxsize()-1){
return false;
}
else{
return true;
}
}
「空の判断」の順にスタック
スタックを分析することは、完全な、完全なリターン偽の場合はtrueを、直接決意トップポインタを返す空であります
template <class T>
inline bool Stack<T>::isEmpty()
{
if(this->getTop()==-1){
return true;
}
else{
return false;
}
}
プリント注文スタック要素
template <class T>
inline void Stack<T>::print()
{
if(isEmpty()){
cout<<"This Stack is empty!"<<endl;
}
cout<<"栈的元素为:"<<endl;
for(int i=0;i<getTop();i++)
{
cout<<"["<<elements[i]<<"]<-";
}
cout<<"["<<elements[getTop()]<<"]"<<endl;
}
比較的私はGitHubの(にアップロードした非常に簡単、完全なコードを話す超える用紙の束のここでは、C ++の実装シーケンス、スタックのC ++実装シーケンス)、スターは歓迎!また、この中で記述されたスタック内の順序を置くことを意図していました一緒に、彼らは本当に大きな記事に動作するだけでなく、恐れ、我々は受け入れることができないので、私は背中に自分自身を更新します。我々はに来ることができる他のデータ構造共有するブログを、私たちは書き込みに悪いところがあれば、私は、また学生です議論するだけでなく、偉大な神は、様々な方面から上げ忘れて、私はそれらを修正します!