Ordenação de strings
#include
// define a estrutura do no struct _no { char nome[40]; char telefone[15]; struct _no *proximo;
};
typedef struct _no No;
// define um ponteiro para o no raiz
No *plista=NULL;
void Insere(char *nome, char *telefone) { No *novo; No *dir; No *esq;
// verifica se o nó raiz é nulo. Se for, cria nó raiz com os dados fornecidos if (plista==NULL) { plista = (No *)malloc(sizeof(No)); strcpy (plista->nome,nome); strcpy (plista->telefone,telefone); plista->proximo = NULL; } else { // se já houver raiz
// percorre a lista encadeada, comecando da raiz. Inicialmente, não // há nó anterior novo = NULL; dir = plista; while (dir!=NULL) { if (strcmp(dir->nome,nome)>=0) break; // se o nó atual é // lexicograficamente superior, // pára else { novo = dir; dir = dir->proximo; } }
if (dir != NULL) // só faz a comparação abaixo se existe o nó Atual if (strcmp(dir->nome,nome)==0) { printf ("Nome já existente!\n"); return; } // aloca memória para o novo nó esq = (No *)malloc(sizeof(No)); // coloca o nó na lista encadeada, mudando o ponteiro para o próximo no // do nó anterior if (dir != plista) novo->proximo = esq; else // se atual é nó raiz, atualiza raiz plista = esq; // coloca dados no nó Inserido strcpy (esq->nome,nome); strcpy (esq->telefone,telefone);
// indica que o próximo nó do nó inserido é o nó apontado por Atual esq->proximo = dir; }
}
void Busca(char *nome) { No *dir; // percorre a lista encadeada desde a raiz dir = plista; while (dir!=NULL) { // verifica se já encontrei ou já passei do nome procurado if (strcmp(dir->nome,nome)>=0) break; else // se ainda não passou dir = dir->proximo; } // verifica se