Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <string.h>
- #include <unistd.h>
- #include <time.h>
- #define MAX_STRING 140
- struct lista {
- int info;
- char nome[MAX_STRING];
- struct lista* prox;
- struct lista* ant;
- };
- typedef struct lista lista;
- lista* cria_lista() {
- return NULL;
- }
- int vazia(lista* lst) {
- return (lst == NULL);
- }
- lista* insere(lista* lst, int aux_info, char aux_nome[MAX_STRING]) {
- lista* novo = (lista*) malloc(sizeof(lista));
- lista* aux = lst;
- lista* scnd_aux = lst;
- int i = 0, j = 0;
- novo->prox = NULL;
- novo->info = aux_info;
- strcpy(novo->nome, aux_nome);
- if (lst == NULL) {
- novo->ant = NULL;
- lst = novo;
- }
- else {
- while (aux != NULL) {
- if (aux->info <= aux_info) {
- scnd_aux = aux;
- j++;
- }
- //printf("%d\n", aux->info);
- aux = aux->prox;
- i++;
- }
- if (j == 0) {
- novo->ant = NULL;
- lst->ant = novo;
- novo->prox = lst;
- lst = novo;
- }
- else if (i == j) {
- scnd_aux->prox = novo;
- novo->ant = scnd_aux;
- }
- else if (j < i) {
- scnd_aux->prox->ant = novo;
- novo->prox = scnd_aux->prox;
- novo->ant = scnd_aux;
- scnd_aux->prox = novo;
- }
- }
- return lst;
- }
- void imprime_crescente(lista* lst) {
- if (!vazia(lst)) {
- lista* aux;
- for (aux = lst; aux != NULL; aux = aux->prox) {
- printf("info: %d\n", aux->info);
- printf("nome: %s\n", aux->nome);
- }
- }
- else {
- printf("Lista não encontrada ou vazia!\n");
- exit(1);
- }
- }
- void imprime_decrescente(lista* lst) {
- if (!vazia(lst)) {
- lista* aux = lst;
- while (aux->prox != NULL)
- aux = aux->prox;
- for (aux; aux != NULL; aux = aux->ant) {
- printf("info: %d\n", aux->info);
- printf("nome: %s\n", aux->nome);
- }
- }
- else {
- printf("Lista não encontrada ou vazia!\n");
- exit(1);
- }
- }
- int leia_valor() {
- int valor;
- printf("Insira o valor: ");
- scanf("%d", &valor);
- return valor;
- }
- void leia_string(char s[]) {
- int i = 0, c;
- printf("Insira o nome: ");
- c = getchar();
- while (c != '\n') {
- s[i] = c;
- i = i + 1;
- c = getchar();
- }
- s[i] = '\n';
- s[i + 1] = '\0';
- }
- void interface() {
- printf("-------------------------------------------------\n");
- printf("\t\tMENU\n");
- printf("-------------------------------------------------\n");
- printf(" 1 - Inserir dados (ordenados)\n");
- printf(" 2 - Imprimir ordem crescente\n");
- printf(" 3 - Imprimir ordem decrescente\n");
- printf(" 4 - Sair\n");
- printf("-------------------------------------------------\n");
- }
- void fflush_in() {
- int ch;
- do {
- ch = fgetc(stdin);
- } while (ch != EOF && ch != '\n');
- }
- int main(int argc, char const *argv[]) {
- int opcao;
- interface();
- lista* lst;
- int aux_info;
- char aux_nome[MAX_STRING];
- lst = cria_lista();
- while (1) {
- printf("Digite a opção: ");
- scanf("%d", &opcao);
- switch (opcao) {
- case 1:
- fflush_in();
- leia_string(aux_nome);
- aux_info = leia_valor();
- lst = insere(lst, aux_info, aux_nome);
- printf("Inserido!\n");
- sleep(2);
- break;
- case 2:
- imprime_crescente(lst);
- sleep(4);
- break;
- case 3:
- imprime_decrescente(lst);
- sleep(4);
- break;
- case 4:
- exit(1);
- default:
- printf("Opção não válida!\n");
- }
- system("clear");
- interface();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement