Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //#define topo(pilha) pilha->start->numero
- typedef struct No
- {
- int numero;
- struct No* ProxNo;
- }No;
- int size;
- void start(No* pilha)
- {
- pilha->ProxNo = NULL;
- size = 0;
- }
- int vazia(No* pilha)
- {
- if (pilha->ProxNo == NULL)
- {
- return 1;
- }
- else {
- return 0;
- }
- }
- No* aloca()
- {
- No* novo = (No*)malloc(sizeof(No));
- if (!novo) {
- printf("Sem memoria.\n");
- exit(1);
- }
- else {
- printf("Digite o numero: ");
- scanf("%d", &novo->numero);
- return novo;
- }
- }
- void imprimir(No* pilha)
- {
- if (vazia(pilha))
- {
- printf("Pilha esta vazia\n");
- return;
- }
- No* ct;
- ct = pilha->ProxNo;
- printf("\nPilha: ");
- while (ct != NULL) {
- printf("%5d\n", ct->numero);
- ct = ct->ProxNo;
- }
- }
- void libera(No* pilha)
- {
- if (!vazia(pilha))
- {
- No* nextNo, * atual;
- atual = pilha->ProxNo;
- while (atual != NULL)
- {
- nextNo = atual->ProxNo;
- free(atual);
- atual = nextNo;
- }
- }
- }
- void PUSH(No* pilha)
- {
- No* novo = aloca();
- novo->ProxNo = NULL;
- if (vazia(pilha))
- {
- pilha->ProxNo = novo;
- }
- else
- {
- No* temp = pilha->ProxNo;
- while (temp->ProxNo != NULL)
- {
- temp = temp->ProxNo;
- }
- temp->ProxNo = novo;
- }
- size++;
- }
- No* POP(No* pilha)
- {
- if (pilha->ProxNo == NULL) {
- printf("Pilha ja esta vazia\n");
- return NULL;
- }
- else
- {
- No* ultimo = pilha->ProxNo, * penultimo = pilha;
- while (ultimo->ProxNo != NULL) {
- penultimo = ultimo;
- ultimo = ultimo->ProxNo;
- }
- penultimo->ProxNo = NULL;
- size--;
- return ultimo;
- }
- }
- void topo(No* pilha) {
- if (vazia(pilha))
- {
- printf("Não ha numeros na pilha\n");
- return;
- }
- No* topor;
- topor = pilha->ProxNo;
- while(topor != NULL)
- {
- topor = topor->ProxNo;
- }
- printf("\nTopo da Pilha: %d", topor->numero);
- //printf("%d\n", ct->numero);
- }
- int menu(void)
- {
- int c;
- printf("\nSelecione sua opção:\n");
- printf("1. Exibir Pilha\n");
- printf("2. Zerar Pilha\n");
- printf("3. PUSH\n");
- printf("4. POP\n");
- printf("5. Sair\n");
- printf("6. Imprime o topo\n");
- printf("Opcao: ");
- scanf("%d", &c);
- return c;
- }
- void selecionar(No* pilha, int slct)
- {
- No* temp;
- switch (slct) {
- case 1:
- imprimir(pilha);
- break;
- case 2:
- libera(pilha);
- start(pilha);
- break;
- case 3:
- PUSH(pilha);
- break;
- case 4:
- temp = POP(pilha);
- if (temp != NULL)
- printf("Ultimo retirado: %3d\n", temp->numero);
- break;
- case 5:
- exit(1);
- break;
- case 6:
- topo(pilha);
- break;
- default:
- printf("Comando invalido\n");
- return;
- }
- }
- int main() {
- No* pilha = (No*)malloc(sizeof(No));
- if (!pilha) {
- printf("Sem memoria\n");
- exit(1);
- }
- else {
- start(pilha);
- int c;
- do {
- c = menu();
- selecionar(pilha, c);
- } while (c);
- free(pilha);
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement