// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП // // Copyright (c) Гергель В.П. 05.08.2000 // // Динамические структуры данных - система N стеков (списки) #include <stdio.h> #include "multlist.h" TMultiListStack :: TMultiListStack () { for ( int i=0; i < MemLimit; i++ ) NextLink[i] = i+1; NextLink[MemLimit-1] =-1; FirstFreeLink = 0; for ( int i=0; i < StackNum; i++ ) StackInd[i] = -1; } /*---------------------------------------------*/ int TMultiListStack :: IsEmpty ( int ns ) const { // контроль пустоты СД return StackInd[ns] < 0; } /*---------------------------------------------*/ int TMultiListStack :: IsFull ( int ns ) const { // контроль переполнения СД return FirstFreeLink < 0; } /*---------------------------------------------*/ void TMultiListStack :: Put ( int ns, const TData &Val ) { // положить в стек if ( IsFull(ns) ) SetRetCode ( DataFull ); else { int k = FirstFreeLink; FirstFreeLink = NextLink[k]; Mem[k] = Val; NextLink[k] = StackInd[ns]; StackInd[ns] = k; SetRetCode ( DataOK ); } } // Put /*---------------------------------------------*/ TData TMultiListStack :: Get ( int ns ) { // взять из стека с удалением Skipped... } // Get /*---------------------------------------------*/ void TMultiListStack :: Print() { // печать значений стеков int pind, ind, k; for ( int ns=0; ns < StackNum; ns++ ) { printf("ns=%d -> ",ns); pind = -1; ind = StackInd[ns]; while ( ind > -1 ) { // оборачивание указателей k = NextLink[ind]; NextLink[ind] = pind; pind = ind; ind = k; } ind = pind; pind = -1; while ( ind > -1 ) { // восстановление указателей и печать printf("%d ",Mem[ind]); k = NextLink[ind]; NextLink[ind] = pind; pind = ind; ind = k; } printf("\n"); } }