Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diogotal

Pilha com char em c++

Recommended Posts

Boa tarde,
Tenho que fazer um programa em C++ que leia os caracteres de meu nome, imprima a pilha e depois imprima o inverso da pilha.
O professor passou alguns algoritmos e pediu para fazermos isso, dei uma pesquisada na internet, alguns videos e cheguei no codigo abaixo, mas, tenho alguns erros que nao encontro, ou algo de errado que estou fazendo. Alguem pode me ajudar?

Obs.: com numeros inteiros consegui fazer, mas com char....

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
int const MAX=1000;
 
int pilha[MAX];
int tope;
 
int pilha_tamanho(){
return tope+1;
}
 
bool pilha_vazia(){
if (tope==-1)
return true;
else
return false;
}
 
bool pilha_cheia(){
if (tope==MAX-1)
return true;
else
return false;
}
 
bool push (char &nom){
if (pilha_cheia()){
return false;
}else{
pilha[tope]=nom;
tope++;
return true;
    }
}
 
bool pop (char nom){
if (pilha_vazia()){
return false;
}else{
nom=pilha[tope];
tope--;
return true;
}
}
 
 
int main(){
 
int valor, i;
char nom;
 
cout<<"Empilhar"<<endl;
push('d');
push('i');
push('o');
push('g');
push('o');
 
for(i=0; i<5; i++){
cout<<pilha[i]<<endl<<endl;
}
 
cout<<"Desempilhar"<<endl;
while(pop(nom)){
cout<<valor<<endl<<endl;
}
 
cout<<"Tamanho da pilha: "<<pilha_tamanho();
 
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se é C++, então pode deixar só o iostream, porque o resto é de C.

#include <iostream>
using namespace std;
 
const int MAX=1000;
char pilha[MAX];
int tope = 0;

bool pilha_vazia(){
  return !tope;
}
 
bool pilha_cheia() {
  return tope == MAX;
}
 
bool push (char nom){
  if (pilha_cheia())
    return false;
  pilha[tope] = nom;
  tope++;
  return true;
}
 
char pop (){
  if (pilha_vazia())
    return '\0';

  char nom = pilha[tope-1];
  tope--;
  return nom;
}
 
 
int main() {
  int valor, i;

  cout<<"Empilhar"<<endl;
  push('d');
  push('i');
  push('o');
  push('g');
  push('o');
 
  for(i=0; i<tope; i++){
    cout<<pilha[i]<<endl;
  }
 
  while(!pilha_vazia()) {
    cout<<pop()<<endl;
  }
 
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda, ficou perfeito.

 

E antes de ver sua resposta eu consegui fazer, nao ficou tao optimizado igual o seu, mas funciou tbm. Vou mandar para que vejam.

 

Mais uma vez obrigado. :thumbsup:

#include <iostream>

using namespace std;

int const MAX=1000;

char pilha[MAX];
int tope;

int pilha_tamanho(){
	return tope+1;
}

bool pilha_vazia(){
	if (tope==-1)
		return true;
	else
		return false;
}

bool pilha_cheia(){
	if (tope==MAX-1)
		return true;
	else
		return false;
}

bool push (char nom){
	if (pilha_cheia()){
		 return false;
	}else{
		pilha[tope]=nom;
		tope++;
		return true;
    }
}

bool pop (char &nom){
	if (pilha_vazia()){
		return false;
	}else{
		nom=pilha[tope];
		tope--;
		return true;
	}
}


main(){

int valor, i;
char nom;

cout<<"Empilhar"<<endl;
push('D');
push('I');
push('O');
push('G');
push('O');

for(i=0; i<5; i++){
cout<<pilha[i]<<endl<<endl;
}

cout<<"Desempilhar"<<endl;
while(pop(nom)){
cout<<nom<<endl<<endl;
}

cout<<"Tamanho da pilha: "<<pilha_tamanho();

return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.