//Дополнение недостающими элементами по левому краю CStack* MakeItFull(CStack *Sequence) { CStack* ToAdd = new CStack; CStack* Reverse = new CStack; char temp; int i; while ( Sequence->Size() != 0 ) { temp = Sequence->Pop_Back(); Reverse->Push_Back(temp); i = -1; while ( i < 5 && temp != sym[++i] ); if ( i < 3 ) { if (ToAdd->Size() != 0) { if( ToAdd->Pop_Back() != temp ) return NULL; } } else { ToAdd->Push_Back(sym[i-3]); } } while ( ToAdd->Size() != 0 ) Reverse->Push_Back(ToAdd->Pop_Back()); while ( Reverse->Size() != 0 ) Sequence->Push_Back(Reverse->Pop_Back()); delete Reverse; delete ToAdd; return Sequence; }
//Вывод стека void output(CStack* Sequence) { CStack* Temp = new CStack; while( Sequence->Size() != 0 ) Temp->Push_Back(Sequence->Pop_Back()); while( Temp->Size() != 0 ) printf("%c",Temp->Pop_Back()); putchar('\n'); }
//请写一个栈的模板类,要求栈的长度可以动态改变。使用如下代码进行测试: int main() { //调用普通模版 int i; CStack<int> stInt; for (i = 1; i <= 20; i++) { stInt.Push(i); } cout << "调用CStack<int>普通模版, 元素个数为: " << stInt.Size() << endl; while (stInt.IsNotEmpty()) { int iData; stInt.Pop(iData); cout << iData << " "; } cout << endl << endl; ///* //调用特化模版 CStack<char *> stCharP; for (i = 1; i <= 15; i++) { char sz[10]; sprintf(sz, "s%d", i); stCharP.Push(sz); } cout << "调用CStack<char *>特化模版, 元素个数为: " << stCharP.Size() << endl; while (stCharP.IsNotEmpty()) { char * pData; stCharP.Pop(pData); cout << pData << " "; } cout << endl << endl; //*/ //返回 system("pause"); return 0; }