przenoszenie elementow stosu

0

Wykorzystując podany program musze napisać program przenoszący elementy stosu S1 na stos S2, nie zmieniając kolejności elementów stosu (korzystając jedynie z pojedynczych zmiennych). NIe mam pojecia jak to zrobic.Prosze o jakakolwiek pomoc . Z gory dzieki.

#include <stdio.h>
#include <conio.h> 

#define rozmiar 10

static char stos[rozmiar];
static int ses = -1;


int isFull(void) {   // sprawdzenie, czy stos jest pełny
    if (ses == rozmiar-1) return 1;
    else return 0;
}

int isEmpty(void) {  // sprawdzenie, czy stos jest pusty
    if (ses == -1) return 1;
    else return 0;
}

void clear(void) {   // wyczyszczenie stosu
    ses = -1;
}

void push(char el) { // włożenie na stos elementu el typu typ
    ses++;
    stos[ses] = el;   
}

void pop(void) {     // zdjęcie ze stosu ostatniego elementu
    ses--;
}

char top(void) {    // odczytanie (bez zdejmowania) ostatniego elementu
    return stos[ses];
}

int main(void){
char elm, plc;

	printf("Wprowadz znak polecenia (c, p, o, t, e, f, w)\n");
	plc=getche();
	while (plc!='/')
	{
       switch(plc){
              case 'c': // clear
                   clear(); 
                   printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
	               plc=getche();
                   break;
              case 'p': // push
                   if(isFull()) printf("\nStos jest pelny!\n");
                   else {
                                      printf("\nWprowadz element stosu\n");
                                      elm=getche();
                                      push(elm);
                   }
                                      printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
                                      plc=getche();    
                    break;
              case 'o': // pop
                   pop();
                   printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
	               plc=getche();
                   break;
              case 't':
                   top(); // top
                   if (ses!=-1)printf("\nSzczytowy element stosu: %c",top());
                   printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
	               plc=getche();
                   break;
              case 'e': // sprawdzenie czy stos jest pusty
                   if(isEmpty()) printf("\nStos jest pusty!");
                   else printf("\nStos nie jest pusty!");
                   printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
                   plc=getche();
                   break;
              case 'f': // sprawdzenie czy stos jest pelny
                   if(isFull()) printf("\nStos jest pelny!");
                   else printf("\nStos nie jest pelny!");
                   printf("\nWprowadz znak polecenia (c, p, o, t, e, f, w)\n");
                   plc=getche();
                   break;
              case 'w': // odczytanie wartosc ze stosu
                   if(!isEmpty()){
                     printf("\nZawartosc stosu (szczyt stosu u gory)\n");
                     int i;
                     for (i=ses; i>=0; i--) printf("%c \n",stos[i]);
                     }
                    else printf("\nStos jest pusty\n");
                    printf("Wprowadz znak polecenia (c, p, o, t, e, f, w)\n");
                    plc=getche(); 
                    break;
              default: // nic
                   printf("\nWprowadz wlasciwe polecenie (c, p, o, t, e, f, w)\n");
                   plc=getche();      
                   break;                
        }    
     }
getche();     
return 0;	
}     
     
0

mamy dwa stosy

int	stos1[100] = {1,2,3,4},
	sp1 = 4, 
	stos2[100],
	sp2 = 0; 

Potrzebne są nam odpowiednie operacje

int pop(int s){
	if(s==1) return(stos1[--sp1]);
	else     return(stos2[--sp2]);}

void push(int s, int v){
	if(s==1) stos1[sp1++]=v;
	else     stos2[sp2++]=v;}

Przeniesienie z jednego na drugi (bez zmiany kolejności) można zrobić np. tak

rusz (d,u,p,e){
	p=sp1-'/'/'/';
	while(sp1>d)
		push(u,pop(d));
	e=pop(d);
	while(p-->'-'-'-')
		push(d,pop(u));
	push(u,e);
	return sp1?rusz(d,u,sp1,sp2):0;
}

Wołamy to oczywiście

	rusz(1,2,sp1,sp2);

Ciekawym, czy można to wykonać mniejszą liczbą operacji push i pop?

0

no tak ale mam za zadanie przeniesc elementy ktore podam w programie powyzej ,czyli dopisac do programu funckje ktora przenosi na je do innego stosuu a nie skorzystanie z zadeklarowanych stosow...

1 użytkowników online, w tym zalogowanych: 0, gości: 1