Você está na página 1de 3

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>

#define num 50

// Declarção da fila
typedef struct {
char* palavra[num];
int primeiro;
int ultimo;
} Fila;

// Inicialização de uma fila


void criarFila (Fila* f) {
f -> primeiro = -1;
f -> ultimo = -1;
}

// Função para verificar se a fila está vazia


int VerifyEmpty (Fila* f) {
return f -> ultimo == -1;
}

// Função para verificar se a fila está cheia


int VerifyFull (Fila* f) {
return f -> ultimo == num - 1;
}

// Função para adicionar uma palavra a fila


void addFila (Fila* f, char* p) {
if (VerifyFull(f)) {
printf("Fila cheia!\n");
} else {
if (f -> primeiro == -1) {
f -> primeiro = 0;
}
f -> ultimo++;
f -> palavra[f -> ultimo] = p;
}
}

// Função para remover um elemento da fila


char* removeFila (Fila* f) {
char* p;
if (VerifyEmpty(f)) {
printf("Fila vazia!\n");
p = NULL;
} else {
p = f -> palavra[f -> primeiro];
f -> primeiro++;
if (f -> primeiro > f -> ultimo) {
criarFila(f);
}
}
return p;
}

// Função para organizar as palavras em ordem alfabética


void ordenarPalavras(char** palavras, int n) {
Fila filas[26];
int i, j, k;
char letra;
char* palavra;

// Inicializa cada fila


for (i = 0; i < 26; i++) {
criarFila(&filas[i]);
}

// Coloca cada palavra na fila correta


for (i = 0; i < n; i++) {
palavra = palavras[i];
letra = palavra[0];
k = letra - 'a';
addFila(&filas[k], palavra);
}

// Coloca as palavras de volta no array


j = 0;
for (i = 0; i < 26; i++) {
while (!VerifyEmpty(&filas[i])) {
palavras[j] = removeFila(&filas[i]);
j++;
}
}
}

// Função para exibir a fila ordenada


void printOrdem(char** palavras, int n) {
int i;
printf("Fila ordenada:\n");
for (i = 0; i < n; i++) {
printf("%s\n", palavras[i]);
}
}

int main() {
int np, i;
char** words;

printf("Digite o numero de palavras:\n");


scanf("%d", &np);
words = (char**)malloc(np * sizeof(char*));

// Le as palavras e as adiciona no array de strings


for (i = 0; i < np; i++) {
printf("Digite uma palavra: ");
words[i] = (char*)malloc(num * sizeof(char));
scanf("%s", words[i]);
}

// Organiza as palavras em ordem alfabetica


ordenarPalavras(words, np);

// Imprime as palavras em ordem alfabetica


printf ("Palavras em ordem alfabética:\n");
printOrdem (words, np);

// Libera a memória alocada para cada string do array


for (i = 0; i < np; i++) {
free(words[i]);
}

// Libera a memória alocada para o array de ponteiros


free(words);

return 0;
}

Você também pode gostar