Programação em C

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Programação em C

Mensagempor double.m » Sábado Dez 26, 2009 17:13

Ola :)

Estou a ter uma cadeira de programação que não foi muito bem dada e tenho nas mãos um projecto para fazer com o qual estou a ter mesmo muitas dificuldades e vejo o prazo de entrega a aproximar-se muito rapidamente.

Basicamente as minhas dificuldades consistem em manipular listas abertas duplamente encadeadas.

Já criei as estruturas, a função que constroi a lista mas estou a ter dificuldades na inserção/remoção do primeiro e do último elemento. Será que alguém me poderia ajudar? Preciso meeeeesmo de ajuda.


As estruturas sao:

typedef struct str_aa {
char b[3];
} str_aa;

typedef struct str_LstAa {
str_aa aa;
struct str_LstAa *prox;
struct str_LstAa *antec;
} str_LstAa;

typedef struct str_Proteina {
int tamanho;
str_LstAa *primeiro;
str_LstAa *ultimo;
} str_Proteina;

E as funções:

void Criar(const int nTamanhoLista)
{
str_LstAa *pPosicaoActual = NULL;
int i = 0;

pProteina = (struct str_Proteina *) malloc(sizeof(struct str_Proteina));

pProteina->tamanho = nTamanhoLista;

pProteina->primeiro = (struct str_LstAa *) malloc(sizeof(struct str_LstAa));
pPosicaoActual = pProteina->primeiro;

for(i = 1;i < nTamanhoLista; i++)
{
pPosicaoActual->prox = (str_LstAa *) malloc(sizeof(str_LstAa));
pPosicaoActual->prox->antec = pPosicaoActual;
pPosicaoActual = pPosicaoActual->prox;
}
pProteina->ultimo = pPosicaoActual;
}


void Insere(const int nPosicao, str_aa *AA)
{
str_LstAa *pNovoElemento = NULL;
str_LstAa *pPosicaoActual = pProteina->primeiro;
str_LstAa *antec = NULL;
str_LstAa *prox = NULL;
str_LstAa *primeiro = pProteina->primeiro;
str_LstAa *ultimo = pProteina->ultimo;
int i;
if (nPosicao == 0)
{
pNovoElemento = (str_LstAa *) malloc(sizeof(str_LstAa));
memcpy(&(pNovoElemento)->aa, AA, sizeof(str_aa));

pNovoElemento->antec = NULL;
pNovoElemento->prox = primeiro;

primeiro->antec = pNovoElemento;
pProteina->primeiro = pNovoElemento;
}

if (nPosicao == (sizeof(str_LstAa)-1))
{
pNovoElemento = (str_LstAa *) malloc(sizeof(str_LstAa));
memcpy(&(pNovoElemento)->aa, AA, sizeof(str_aa));

pNovoElemento->ultimo = pPosicaoActual->ultimo;
pNovoElemento->antec = pPosicaoActual;

pPosicaoActual->prox = pNovoElemento;
pNovoElemento->ultimo->antec = pNovoElemento;

}

if (nPosicao > 0 && nPosicao < sizeof(str_LstAa) - 1)
{
//ProcuraCodao (); // FAZER FUNÇAO!
for(i = 1;i < nPosicao; i++)
{
pPosicaoActual = pPosicaoActual->prox;
}
pNovoElemento = (str_LstAa *) malloc(sizeof(str_LstAa));
memcpy(&(pNovoElemento)->aa, AA, sizeof(str_aa));

pNovoElemento->prox = pPosicaoActual->prox;
pNovoElemento->antec = pPosicaoActual;

pPosicaoActual->prox = pNovoElemento;
pNovoElemento->prox->antec = pNovoElemento;
}
pProteina->tamanho = pProteina->tamanho + 1;
}


Agradecia MESMO a quem me conseguisse ajudar!
Cumprimentos!!!
double.m
Novato
Novato
 
Mensagens: 1
Registado: Sábado Dez 26, 2009 17:08

Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 10 visitantes

cron