
aninha1988
Membros-
Total de itens
14 -
Registro em
-
Última visita
Sobre aninha1988

aninha1988's Achievements
0
Reputação
-
:unsure: Pessoal...eu preciso fazer um codigo que inverta slices de uma lista duplamente ligada...alguém sabe para que serve uma copia da minha lista original mantida junto com a lista que eu vou trocar...digo...essa foi a dica dada para a resolução do exercicio...manter uma copia da lista junto com a lista que avança...com ligação entre os elementos correspondentes das duas lisats...mas para que serve a copia da lista....alguém sabe me explicar??????????????
-
ajuda com algoritmo para listas duplamente ligadas
pergunta respondeu ao aninha1988 de aninha1988 em C, C++
se eu usar o codigo desse jeito...não vou acrescentar elementos na lista andando do final para o começo??? -
Oi pessoal...alguém sabe me dizer o que há de errado com o código abaixo... O meu programa tem que ler uma string do teclado com no maximo 9 caracteres...cada caractere lido precisa ser armazenado separadamente em uma celula contendo um indice que começa em 1...quero inserir celulas sempre ao final de uma lista duplamente ligada... #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int j; int l; struct node{ struct node*prev; int index; char item; struct node*prox; }*head, *tail; typedef struct node node; gene*criar(int n, char str[]){ node*nova; nova=(node*)malloc(sizeof(node)); nova->index=j; nova->item=str[l]; nova->prox=tail; nova->prev=head; return nova; } node*inserir(int n, char str[]){ node*nova; while((nova->prox==NULL)==0){ nova=nova->prox; nova->prox=(criar(n, str)); (nova->prox)->prev=nova; } return nova; } int main(){ head=tail=NULL; node*no; char cadeia[9]; gets(cadeia); for(j=1; j<=9; j++){ for(l=0; l<9; l++){ no=(inserir(9,cadeia)); printf("%d\n", node->index); printf("%c\n", node->item); } } getch(); } O problema é que quando o programa imprime cada saida....aparece sempre um 0 e um simbolo estranho...e não o indice seguido do respectivo caratere...
-
ajuda com algoritmo para listas duplamente ligadas
pergunta respondeu ao aninha1988 de aninha1988 em C, C++
Valeu mesmo....eu precisava de uma função de inserção...que nem essa que você me passou ...e uma de inversão do conteudo da lista...tipo uma que troque dois a dois os elementos...ou que troque o primeiro com o ultimo...o segundo com o antepenultimo...que seria bem mais rapido para inveter uma parte especifica da lista....masw mesmo assim muito obrigada...agora que seii como criar a lista vou tentar inverte-la...valeu... -
Obrigada...vou tentar implementar o codigo com a mudança que você sugeriu...
-
:unsure: Oi pessoal...por favor...alguém tem ai algum codigo (EM C) que crie uma lista duplamente ligada...adiocionando novos nós e atualizando tantos os ponteiros de proxima celula quanto os de celula anterior.... me ajudem por favor...eu não consigo atualizar os ponteiros de celula anterior....
-
valeu...vou tentar usa-lo no meu programa...
-
eu arrumei o lance do indice e do looping...e o codigo tah assim #include <stdio.h> #include <string.h> #include <conio.h> #define MAXV 20 #define MAXM 10001 int main(){ char linha[100];; int a; int v[MAXV]; int i; int b; int nc; FILE*arquivo; b=0; arquivo=fopen("entrada.txt", "r"); fscanf(arquivo, "%d", &a); if((a<1)||(a>MAXM)){ printf("\nErro: O numero lido excede o numero maximo de operacoes aceito pelo programa!!!\n\n"); printf("\nO programa aceita no maximo 10000 operacoes de troca!!!\n\n"); exit(1); } fgets(linha, 100, arquivo); nc=strlen(linha); if(nc<1){ printf("\nErro: não há string no arquivo!!!\n\n"); exit(1); } for(i=0; i<MAXV; i++){ fscanf(arquivo, "%d", &(v)); b=b+1; printf("%d\n", v); } printf("%d\n", a); printf("%s\n",linha); getch(); } só que ainda tem algum erro....o meu arquivo de entrada tem as seguintes linhas... 3 ATATGCGA 3 6 4 8 3 4 era pra imprimir... 3 3 6 4 8 3 4 ATATGCGA e tah imprimindo... 3 3998056 não consigo entender porque????
-
:unsure: quando digito o seguinte codigo em c... #include <stdio.h> #include <string.h> #include <errno.h> #include <conio.h> #define MAXV 20 #define MAXM 10001 int main(){ char*linha; int a; int v[MAXV]; int i; int b; int nc; FILE*arquivo; b=0; arquivo=fopen("entrada.txt", "r"); fscanf(arquivo, "%d", &a); if((a<1)||(a>MAXM)){ printf("\nErro: O numero lido excede o numero maximo de operacoes aceito pelo programa!!!\n\n"); printf("\nO programa aceita no maximo 10000 operacoes de troca!!!\n\n"); ferror(arquivo); } linha=(char*)malloc(100); fgets(linha, 100, arquivo); nc=strlen(linha); if(nc<1){ printf("\nErro: não existe string no arquivo!!!\n\n"); ferror(arquivo); } for(i=0; i<MAXV; i++){ fscanf(arquivo, "%d", v); b=b+1; } printf("%d\n", a); printf("%d\n", v[0]); printf("%s\n",linha); getch(); } O Devc++ executa e compila...porem o meu programa só esta imprimindo a leitura da primeira linha do arquivo...no caso... o a... o compilador apresenta dois erros....e mesmo assim forma o arquivo executavel... Permission denied ld returned 1 exit status alguém sabe o que são esses erros e auql o problema com o meu codigo???????
-
:unsure: Alguém conhece algum algoritmo...algum codigo que inverta os elementos de uma lista ligada...mas não o jeito convencional...trocar o primeiro pelo segundo ...depois o segundo pelo terceiro...ateh que toda a lista esteja invertida....preciso de algo que seja mais rapido...por exemplo....tenho uma lista duplamente ligada com variaos elelemntos indexados...preciso trocar o elemento de indice 2 pelo de indice 5...o de indice 3 pelo de indice 4....tipo invertendo apenas slices da lista.... se a minha slice for de tamanho impar...preciso inverter is elemntos da ponta ateh que chegue no elemento central....usando um ponteiro de estrutura que aponta para a proxima celula enquanto o outro aponta para a anterior....ateh que eles se encontrem .... se alguém souber como fazer para me ajudar...agradeço....
-
:unsure: Para inverter os elementos de uma lista duplamente ligada....por exemplo...com o ponteiro p1 apontando para o elemento 2...o ponteiro p2 apobntando para o elemento 5 e trocar o conteudo deles até que eles se encontrem no mesmo elemento posso usar o seguinte codigo??? while(p1->index!=p2->index){ if(p1->item!=p2->item){ p3->item=p1->item; p1->item=p2->item; p2->item=p3->item; } p1=p1->proximo; p2=p2->anterior; } O correto é dizer p1=p1->proximo; ou p1->proximo=p1->proximo; para que o meu ponteiro aponte para aproxima celula??? E para percorrer uma lista os ponteiros precisam ser iniciados da cabeça dela os posso coloca-los direto na posição que eu quero????? :unsure: Posso comparar o elemento de uma lista com um numero qualquer...por exemplo... if(p1->item!=vetor){ blá blá blá.... } Posso incrementar ou decrementar um campo de uma celula de uma lista???...por exemplo... p2->item=p2->(item-1);
-
Valeu pela dica...obrigada...vou tentar resolver agora.... :D
-
Como posso declarar uma string sem tamanho definido?
-
Oi pessoal...sou nova neste fórum e estou aprendendo sobre linguagem C... tenho dúvidas em um exercício que preciso fazer....aqui vai o enunciado para que vocês possam entendê-lo: Este exercício está baseado num problema que ocorre em Biologia Computacional. Todos sabem sobre DNA. Um DNA pode ser resumido como um string nas letras ATCG. O DNA pode sofrer uma série de mutações, alguma das quais podem ser descritas como transformações algorítmicas no string. Uma delas é a reversão, e este problema consiste em simular uma série de reversões. Dada uma sequência de DNA inicial (descrita por uma sequência de N caracteres, com valor A, T, C ou G), uma reversão consiste em destacar um trecho contínuo desta sequência e recolocá-lo na ordem invertida, invertendo a sequência de caracteres deste trecho. A operação é descrita pelos índices da posição inicial e final do trecho (indexamento começando em 1). O programa deve ler, da entrada padrão (stdin), uma sequência de DNA inicial e uma série de operações de inversão a serem realizadas em sequência e imprimir os 1000 primeiros caracteres (ou todos caso N < 1000) da sequência final, na saída padrão (stdout). A entrada conterá 3 linhas. A primeira linha conterá um número, M, com a quantidade de operações a serem realizadas. A segunda linha conterá uma sequência de N caracteres representando o DNA inicial, cada caracter com valor A, T, C ou G. A terceira linha conterá M pares de números (ai e bi, respeitando 1 ≤ ai < bi ≤ N) representando o índice inicial e final de cada operação. Restrições: 1 < N ≤ 10.000.000; 1 ≤ M ≤ 10.000. Tempo de processamento: 10 seg. Exemplo de entrada e saída: 3 ATATGCGA 3 6 4 8 3 4 ATACGATG Veja o que aconteceu (em vermelho os trechos invertidos): Sequência inicial: ATATGCGA Operação 1: [3, 6] Sequência 2: ATCGTAGA Operação 2: [4, 8] Sequência 3: ATCAGATG Operação 3: [3, 4] Sequência final: ATACGATG A intenção deste exercício é testar a capacidade de adaptar estrutura de dados para aplicações específicas, otimizando o tempo de processamento, reduzindo a complexidade computacional temporal da solução.Uma solução intuitiva, realizando as operações de reversão em um vetor de modo direto, tem tempo de complexidade computacional O(M*N), N para cada operação. Para as restrições acima, isso corresponderia a uma ordem de 1012 operações, o que deve estourar o limite de 10 seg imposto.Para melhorar o tempo de processamento, o programa deve conter uma estrutura mais eficiente. Uma possibilidade é uma estrutura baseada em lista ligada, que não tenha que inverter os caracteres um por um a cada operação. Alguém sabe como posso utilizar uma lista ligada para conseguir inverter a sequencia do DNA??? A lista ligada deve ser a seuqncia recebida pelo meu programa...tipo...cada gene deve ser uma célula da lista?? Minha idéia inicial era inverter os elementos da string com base no bubblesort...mas ira estourar o tempo de execução do programa.... Se alguém puder me ajudar ficarei muito agradecida....