Ir para conteúdo
Entre para seguir isso  
Elison_Nascimento

Estruturas Genéricas

Recommended Posts

Bom dia pessoal! Estou estou no segundo semestre do curso de sistemas de informação, e comecei a estudar estruturas de dados. Preciso que me ajudem com a implementação dos algoritmos em C, estrutura FIFO, Round-Robin, SJF, Prioridade e Múltiplas Filas. Grato desde já a quem puder me ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

São problemas clássicos de cursos de ciência da computação.

Como faz bem conhecer a teoria, caso contrário você não vai entender a aplicação dessas coisas, pesquise. Google está aí pra isso. Não encontrou na Internet, procure livros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por matt.valenzza@gmail.com
      Preciso fazer uma lista duplamente encadeada para ela inserir os números, mostrando eles, localizar em qual posição eles estão e excluir. Eu fiz o código, mas preciso que os números mostrem o número atual, o anterior e o próximo. Que na hora de compilar, que ele mostre o numero anterior, o atual e o próximo em um pequeno menuzinho.
       
      Segue o código que eu criei até agora. 
       
       
       
       
      #include <stdio.h> struct Lista{ int num; struct Lista *prox; struct Lista *ant; }; struct Lista* criarNovoElemento(){ struct Lista *novo = NULL; novo = malloc(sizeof(struct Lista)); printf("Informe o numero..: "); scanf("%i", &(*novo).num); (*novo).prox = NULL; return novo; } inserir (struct Lista **a){ if (*a == NULL){ *a = criarNovoElemento(); } else{ struct Lista *aux; aux = *a; while( (*aux).prox != NULL){ aux = (*aux).prox; } (*aux).prox = criarNovoElemento(); } } mostrar(struct Lista **a){ if (*a == NULL){ printf("\n....Cadastro vazio....\n"); } else{ struct Lista *aux; aux = *a; while( aux != NULL){ printf("\nAtual..: %i", (*aux).num); aux = (*aux).prox; } } printf("\n"); system("pause"); } localizar (struct Lista **a){ if (*a == NULL){ printf("\n....Cadastro vazio....\n"); } else{ int num = 0; int achei = 0; int cont = 0; printf("Informe o numero: "); scanf("%i", &num); struct Lista *aux; aux = *a; while( aux != NULL && achei == 0){ cont += 1; if ((*aux).num == num){ achei = 1; } aux = (*aux).prox; } if (achei == 1){ printf("\n.....Achei na posicao: %i.....\n", cont); } else{ printf("\n.....Nao Achei....\n"); } } printf("\n"); system("pause"); } excluir(struct Lista **a){ if (*a== NULL){ // verificar se existe algum elemento na lista printf("\n....Cadastro vazio....\n"); } else{ struct Lista *aux =*a; a= (**a).prox; free(aux); } printf("\n"); system("pause"); } main (){ struct Lista *inicio = NULL; int opcao = 0; while(opcao != 9){ system ("cls"); printf("\n[1] Inserir Elemento"); printf("\n[2] Mostrar Elemento"); printf("\n[3] Localizar Elemento"); printf("\n[4] Excluir "); printf("\n[9] Finalizar"); printf("\nInforme a opcao: "); scanf("%i", &opcao); switch(opcao){ case 1 : inserir(&inicio); break; case 2 : mostrar(&inicio); break; case 3 : localizar(&inicio); break; case 4 : excluir(&inicio); break; case 9 : printf("Programa finalizado"); } } }  
    • Por ricardorstc
      E aí, pessoa tudo certo?
      Estou fazendo um programa que imita uma loja de informática com structs, alocação dinâmica e pilha em c e preciso da ajuda de vcs em algumas funções que não consegui fazer. Preciso que me ajudem fazer uma função para Editar um bloco especifico da pilha, outra função para Apagar um bloco especifico na pilha e uma função para Buscar valores a cima do informado pelo usuário, por exemplo: se o usuário digitar o preço 5, é pra mostrar os produtos com valores acima de 5. Vou mandar o código do que fiz aqui em baixo, mas a função excluir está errada, desconsiderem ela.

       
      #include <stdio.h> #include <stdlib.h> #include <ctype.h> typedef struct kabum {     char desc [30];     int cod;     float valor;     struct kabum *ant; } p; p *novo, *topo=NULL; int i=0; int quant; FILE *arquivo; int inserir () {     printf("\n\n    QUANTOS PRODUTOS QUER CADASTRAR?: ");     scanf("%d",&quant);     for (i=0; i<quant; i++)     {         novo=(p *) malloc (2*sizeof(p));         fflush(stdin);         printf("\n\n    PRODUTO: ");         gets(novo->desc);         printf("    CODIGO: ");         scanf("%d",&novo->cod);         printf("    VALOR: R$");         scanf("%f",&novo->valor);         novo->ant=NULL;         if(topo==NULL) //pilha vazia?         {             topo=novo;         }         else         {             novo->ant=topo;             topo=novo;         }     }     return (0); } int mostrar () {     p *tmp;     tmp=topo;     if (tmp==NULL)   //aqui ele testa p/ saber se a pilha está fazia     {         printf ("\n\n     PILHA VAZIA! INSIRA UM DADO E TENTE NOVAMENTE.\n");     }     else     {         while (tmp!=NULL)         {             printf("\n\n    PRODUTO: %s\n", tmp->desc);             printf("    CODIGO: %d\n",tmp->cod);             printf("    VALOR: R$%0.2f\n\n",tmp->valor);             tmp=tmp->ant;         }     }     return (0); } int deletar () {     char alerta;     p *extra;     extra = topo;     if (topo == NULL)     {         printf ("\n\n     PILHA VAZIA!\n");     }     else     {         printf("\n\n      TEM CERTEZA DE DESEJA EXCLUIR A PILHA? (S/N): ");         scanf("%c",&alerta);         alerta=tolower(alerta);         if (alerta=='s')         {             topo = topo -> ant;             free(extra);             printf("\n      PILHA DELETADA! \n");         }         if (alerta=='n')         {             printf("\n      PILHA NAO DELETADA! \n");         }         if (alerta!='s' && alerta!='n')         {             printf("\n\n      OPCAO INVALIDA\n");         }     }     return(0); } int salvar() {     p *tmp;     tmp=topo;     arquivo=fopen("text.txt","wb");     /*    if (tmp==NULL)         {             printf("\n\n    ERRO AO SALVAR, PILHA ESTA VAZIA. INSIRA UM DADO E TENTE NOVAMENTE! \n");         }*/     while (tmp!=NULL)     {         fprintf(arquivo,"\n\n     PRODUTO: %s \n",tmp->desc);         fprintf(arquivo,"     CODIGO: %d \n",tmp->cod);         fprintf(arquivo,"     VALOR: %f ",tmp->valor);         tmp=tmp->ant;     }     fclose(arquivo);     printf("\n\n    ARQUIVO SALVO COM SUCESSO!\n");     return 0; } int abrir() {     p *tmp;     tmp=topo;     arquivo=fopen("text.txt","rt");     if (arquivo == NULL)     {         printf("\n\n    NAO FOI POSSIVEL ABRIR O ARQUIVO. SALVE E TENTE NOVAMENTE! \n");     }     char frase [10000];     while (fgets(frase, 1000,arquivo)!=NULL)     {         printf("%s\n",frase);     }     fclose(arquivo);     return 0; } void sobre () {     printf("\n\n");     printf("    *================================ SOBRE ================================*\n");     printf("    |                                                                       |\n");     printf("    |PROGRAMA CRIADO UTILIZANDO ALOCACAO DINAMICA, STRUCTS E PONTEIROS, COMO|\n");     printf("    |FORMA DE AVALIACAO DA DISCIPLINA DE ESTRUTURA DE DADOS, DO PROFESSOR:  |\n");     printf("    |GUSTAVO QUIRINO E APRESENTADO EM SALA DE AULA, COM A FINALIDADE DE     |\n");     printf("    |OBTER UMA DAS NOTAS DA SEGUNDA UNIDADE.                                |\n");     printf("    |                                                                       |\n");     printf("    |                          IDENTIFICACAO                                |\n");     printf("    |                                                                       |\n");     printf("    |IFBA - CAMPUS BARREIRAS                                                |\n");     printf("    |TURMA: 732                                                             |\n");     printf("    |CURSO: INFORMATICA                                                     |\n");     printf("    |PROFESSOR: GUSTAVO QUIRINO                                             |\n");     printf("    |COMPONENTES: LUCAS GOMES, MATEUS SENE E RICARDO CARVALHO               |\n");     printf("    |                                                                       |\n");     printf("    =========================================================================\n"); } int main () {     char op_menu=0, op_menu_interno=0; /*variaveis zeradas pq pode ser que o programa seja exacutado mais de uma vez     por isso eu zerei todas, para não pegar os valores das vezes anteriores. A cada nova execução     todas são zeradas*/     do     {         printf("\n\n");         printf("    *======================= MENU PRINCIPAL =========================*\n");         printf("    |                                                                |\n");         printf("    |                                                                |\n");         printf("    |         A - INSERIR                   B - MOSTRAR              |\n");         printf("    |                                                                |\n");         printf("    |         C - DELETAR                   D - EDITAR               |\n");         printf("    |                                                                |\n");         printf("    |         E - BUSCAR                    F - SALVAR               |\n");         printf("    |                                                                |\n");         printf("    |         G - ABRIR                     H - SOBRE                |\n");         printf("    |                                                                |\n");         printf("    |                        S - SAIR                                |\n");         printf("    |                                                                |\n");         printf("    |                                                                |\n");         printf("    ==================================================================\n");         fflush(stdin);         printf("\n    Digite...: ");         scanf("%c", &op_menu);         op_menu=tolower(op_menu);         fflush(stdin); //limpa o buffer do teclado         switch(op_menu)         {         case 'a'  :             fflush(stdin);             system("cls"); //limpa a tela             inserir();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;             fflush(stdin);         case 'b':             system("cls");             mostrar();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;         case 'c':             fflush(stdin);             system("cls");             deletar();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;             fflush(stdin);         case 'd':             fflush(stdin);             system("cls");             printf("você digitou: 4");             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;             fflush(stdin);         case 'e':         case 'f':             fflush(stdin);             system("cls");             salvar();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;         case 'g':             fflush(stdin);             system("cls");             abrir();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;         case 'h':             system("cls");             sobre();             printf("\n");             do             {                 printf("    0 - Menu principal: ");                 scanf("%s",&op_menu_interno);             }             while (op_menu_interno!='0');             system("cls");             break;         case 's':             system("cls");             printf("\n");             printf("Finalizando programa...");             printf("\n");             exit(0);             break;         default:             system("cls");             printf("Codigo invalido! Digite novamente");             break;         }     }     while (op_menu!=5);     return (0); }  
    • Por lanahwinchester
      #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int topo=-1, tamanho = 5, total = 0, inicio = 0, fim = 0, vetor[5]; char letra; void enfileirar(); void desenfileirar(); void elementoinicio(); void mostrarfila(); void exit(); int main() { char letra; int i,menu; for(i=0;i<5;i++){ cout<<"Digite uma letra:";cin>>letra; printf("(1) Enfileirar\n(2) Desenfileirar\n(3) ElementoInicio\n(4)MostrarFila\n(5)Sair(0)"); scanf("%d%*c", &menu); switch(menu){ case 1 : void enfileirar(int letra); break; case 2 : void desenfileirar(int letra); break; case 3 : void elementoinicio(int letra); break; case 4 : void mostrarfila(int letra); case 5: exit(0); } } } void enfileirar() { if (!filacheia()){ vetor[fim] = letra; fim = fim + 1; total = total + 1; if ( fim >= 5) fim = 0; } else{ cout<<"Fila cheia!"; } int Desenfileirar (){ int desenfileirado = -1; if (FilaVazia()) cout<<"Fila vazia"; else { desenfileirado = vetor[inicio]; inicio = inicio + 1; total= total -1; if ( inicio >= tamanho ) inicio = 0; } return desenfileirado; } void ElementoInicio() { if (!FilaVazia()) cout<<"O elemento do inicio e:"; vetor[inicio]); else cout<<"Fila vazia"; } void MostrarFila() { int pos; pos = inicio; for (int i= 0; i < total; i++) { cout<<"elemento posicao";cin>>vetor[i],i; pos = pos + 1; if ( pos>= tamanho ) pos = 0; } } } Meu professor pediu para que fizéssemos um programa com um menu para enfileirar,desenfileirar,elemento início,mostrar fila e sair , no caso enfileirar letras . Ao rodar o programa está dando os seguintes erros no devc :    In function 'void enfileirar()': [Error] 'filacheia' was not declared in this scope;  [Error] a function-definition is not allowed here before '{' token;   [Error] expected '}' at end of input. Não sei onde posso estar errando.
       
       
       
    • Por Bruno Rafael
      Programa está inserindo normalmente, mais não está ordenando e nem mostrando os itens ordenados. 
       
      obs1: Usando bubblesort
      obs2: ordenando primeiro por nome e depois por idade
       
      #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct lista { int qtd; struct Aluno * inicio; }lista; typedef struct Aluno { char nome[30]; int idade; struct Aluno * prox; }Aluno; lista * aloca_lista(); Aluno * aloca_aluno(); int inserir(lista *l, char * nome, int idade); void mostrar(lista *l); int main() { char aux[30]; int i,aux2,aux3,aux4,tam=3,pass,trocou; Aluno * aluno[3]; lista * l1; l1 = aloca_lista(); aux4 = l1->inicio; int idade; char nome[30]; for(i=0; i<3; i++) { printf("\nDigite o nome do aluno[%d]: ",i+1); fflush(stdin); gets(nome); printf("\nDigite o numero: "); fflush(stdin); scanf("%d",&idade); inserir(l1,nome,idade); } trocou = 1; for(pass=0; pass<tam-1 && trocou==1; pass++) { trocou = 0; for(i=0; i<tam-pass-1; i++) { if(strcmp(aluno[i]->nome,aluno[i+1]->nome) == 0) { if(aluno[i]->idade > aluno[i+1]->idade) { aux2 = aluno[i]->idade; aluno[i]->idade = aluno[i]->prox->idade; aluno[i]->prox->idade = aux2; strcpy(aux,aluno[i]->nome); strcpy(aluno[i]->nome,aluno[i+1]->nome); strcpy(aluno[i+1]->nome,aux); trocou = 1; } } else if(strcmp(aluno[i]->nome,aluno[i+1]->nome)>0) { aux3 = aluno[i]->idade; aluno[i]->idade = aluno[i+1]->idade; aluno[i+1]->idade = aux3; strcpy(aux,aluno[i]->nome); strcpy(aluno[i]->nome,aluno[i+1]->nome); strcpy(aluno[i+1]->nome,aux); trocou = 1; } } } printf("\nmostrando:\n\n"); mostrar(l1); return 0; } lista * aloca_lista() { lista * novo; novo = (lista*)malloc(sizeof(lista)); novo->qtd = 0; novo->inicio = NULL; return novo; } Aluno * aloca_aluno() { Aluno * novo; novo = (Aluno*)malloc(sizeof(Aluno)); novo->idade = 0; strcpy(novo->nome," "); novo->prox = NULL; return novo; } int inserir(lista *l,char * nome, int idade) { Aluno * novo, * aux; novo = aloca_aluno(); novo->idade = idade; strcpy(novo->nome,nome); if(l->inicio == NULL) { l->inicio = novo; } else { aux = l->inicio; while(aux->prox != NULL) { aux = aux->prox; } aux->prox = novo; } l->qtd++; return 1; } void mostrar(lista *l) { Aluno * aux; aux = l->inicio; while (aux != NULL) { printf("\nNome: %s",aux->nome); printf("\nIdade: %d",aux->idade); aux = aux->prox; } }  
    • Por spiderlucass
      #include <stdio.h> #include <stdlib.h> #include "labirinto.h" int** cria_matriz(int tamanho){     int **matriz = (int **)malloc(tamanho*sizeof(int *));     for(int i = 0; i<tamanho; i++){         matriz[i] = (int *)malloc(tamanho*sizeof(int));         for(int j = 0; j<tamanho; j++){            matriz[i][j] = 9;             printf("%d ", matriz[i][j]);         }         printf("\n");     }     return matriz; } int linha = 0, coluna=0; void cria_labirinto(int matriz[][TAMANHO], int tamanho){     int x = rand()%3;     if(linha == 0){         coluna = rand()%tamanho;         matriz[linha][coluna] = 0;     }     else if(x==1 && coluna!=0) matriz[linha][coluna-1] = 0;     else if(x==2 && coluna!=tamanho) matriz[linha][coluna+1] = 0;     else if(x==3 && linha!= tamanho) matriz[linha+1][coluna] = 0;     if(linha == tamanho){         matriz[linha][coluna] = 2;         return;     }     else {         linha++; coluna++;         // cria_labirinto(matriz[][tamanho], tamanho);     }     for(int i = 0; i<tamanho; i++){         for(int j = 0; j<tamanho; j++){            printf("%d ", matriz[i][j]);         }         printf("\n");     } } Preciso retornar uma matriz para usa-la novamente em outra função que irá 'bagunça-la' para formar um labirinto. 

      A dúvida é: como retorno a função criada (preenchida com 9) e como a passo como parâmetro na função que irá bagunça-la. 
×

Informação importante

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