// ННГУ, ВМК, Курс "Методы программирования-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");
  }
}
Хостинг от uCoz