Ejemplo n.º 1
0
int main()
{
	//Stack <double, 5> kExpStack;
	Stack <double> kExpStack(5);

	cout << "Stack Size = " << kExpStack.GetStackSize() << endl;
	kExpStack.push(145.5f);
	kExpStack.push(183.25f);
	kExpStack.push(162.3f);


	int Count = kExpStack.Count();

	for ( int i = 0 ; i < Count; ++i ) 
	{
		cout << kExpStack.pop() << endl;
	}


	Stack <long> kStackMoney;

	cout << "Stack Size = " << kStackMoney.GetStackSize() << endl;

	kStackMoney.push(1000023);
	kStackMoney.push(1000234);
	kStackMoney.push(1000145);

	Count = kStackMoney.Count();
	for ( int i = 0 ; i < Count; ++i) {
		cout << "money - " << kStackMoney.pop() << endl;
	}

	char GameID1[MAX_ID_LENGTH] = "Nice";
	char GameID2[MAX_ID_LENGTH] = "Super";


	Stack<char *> kStack2(64);

	kStack2.push(GameID1);
	kStack2.push(GameID2);

	Count = kStack2.Count();
	for ( int i = 0 ; i < Count; ++i) {
		cout << "ID - " << kStack2.pop() << endl;
	}

	return 0;
}
Ejemplo n.º 2
0
//------------------------------------------------------------------------------
//М-эталонная быстрая сортировка
int MQuickSort(FILE *out, int m, Stack stack)
{
  long count=stack.Count(),
       k=m,  //число, определяющее значение "pos"
       pos,  //позиция эталонного элнмента
       e[m], //массив эталонных элементов 
       i, j; //счётчики    
  //стек "stack" нельзя разбить на М+1 часть
  if (count<2*m)
  {  
    //стек "stack" состоит из 1 элемента
    if (count==1)
      fprintf(out, "%i ", stack.Top());
    else
    {
      //сортировка стека "stack" простой вставкой
      //результат сортировки: стек "stack1"
      Stack stack1, stack2; //вспомогательные стеки
      while (stack.Count()!=0)
      {    
        if ((stack1.Count()==0) | (stack1.Top()>stack.Top()))
        {
          stack1.Push(stack.Top());
          stack.Pop();
          pop++;
        }
        else
        {
          //"перекидываем" элементы из "steck1" в "steck2", пока 
          //вершинный элемент <stack.Top()
          while ((stack1.Top()<stack.Top()) & (stack1.Count()!=0))
          {
            stack2.Push(stack1.Top());
            stack1.Pop(); 
            pop++;
          }
          //вставляем в "steck1" эдемент stack.Top()
          stack1.Push(stack.Top());
          stack.Pop();
          pop++;
          //"перекидываем" все элементы из "steck2" в "steck1"
          while (stack2.Count()!=0)
          {
            stack1.Push(stack2.Top());
            stack2.Pop();
            pop++;
          }
        }
      }
      //вывод отсортированного стека в текстовый файл
      while (stack1.Count()!=0)
      {
        fprintf(out, "%i ", stack1.Top());
        stack1.Pop();
        pop++;
      }
    }
    return 0;
  }      
  Stack s[m+1], //массив стеков
        tmp;    //вспомогательный стек ("stack" без эталонных элементов)
  //разбитие стека "steck" на стек "tmp" и эталонные элементы "e[i]"
  for (i=0;i<=m;i++)
  {
    pos=k*(count+1)/(m+1); //позиция очередного эталонного элемента
    while (stack.Count()!=pos)
    {
      tmp.Push(stack.Top());
      stack.Pop();
      pop++;
    }
    if (k!=0)
      e[k-1]=stack.Top(); 
    stack.Pop();
    pop++;
    k--;
  }
  //сортировка пузырьком эталонных элементов "e[i]"
  if (m!=1)
    for (i=0;i<m;i++)
      for (j=i+1;j<m;j++)
        if (e[i]>e[j])
        {
          long temp=e[i];
          e[i]=e[j];
          e[j]=temp;
        }
  //разбиение стека "steck" без эталонных элементов (стек "tmp") на M+1 стек "s[i]"
  //в 1 стек попадут элементы <e[0], во 2 - <e[1], но >=a[0] и т.д.
  while (tmp.Count()!=0)
  {
    j=0;
    while (j<m)
    {
      if (tmp.Top()<e[j])
      {
        s[j].Push(tmp.Top());
        tmp.Pop(); 
        pop++;     
        if (tmp.Count()==0)
          break;  
        j=0;
      }
      else 
        j++;
    }
    if (tmp.Count()==0)
      break;
    //элемент попал в последний стек "s[m]"
    s[m].Push(tmp.Top());
    tmp.Pop(); 
    pop++;
  }  
  for (i=0;i<=m;i++)
  {
    //рекурсивный вызов быстрой сортировки для каждого стека "s[i]"
    MQuickSort(out, m, s[i]);
    if (i!=m)
    {
      //вывод эталонного элемента в текстовый файл
      fprintf(out, "%i ", e[i]);
    }  
  }  
}