Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula 11 - Diferença básica entre lista simplesmente encadeada da lista duplamente encadeada. Mestranda em Metodologias para o Ensino de Linguagens e suas Tecnologias Nodo = register of (INFO : string; PROX : pointer;); Ref Luis Claudio Paulo João Rogério José Solução para eliminar essa limitação: incorporar ao nodo um segundo apontador que identificará qual o nodo antecessor Nodo = register of (INFO : string; PROX : pointer;); Nodo = register of (INFO : string; ANT : pointer; PROX : pointer;); Operação de inserção à direita: FelipeY Amanda Ref Paula Fernando Ref Amanda Paula Felipe Fernando aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Fernando Ref P Felipe Aula 12 – Inclusão à direita Mestranda em Metodologias para o Ensino de Linguagens e suas Tecnologias aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref P aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref P Felipe aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; Amanda Paula Ref P Felipe Inserção à direita: aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.PROX := REF.PROX; P.ANT := REF; REF.PROX := P; se P.PROX # então P.PROX.ANT := P; fim se; fim se; aloc P; P.INFO := Y; se REF= então REF:= P; P.ANT := ; P.PROX := ; senão P.ANT := REF.ANT; P.PROX := REF; REF.ANT := P; se P.ANT # então P.ANT.PROX := P; fim se; fim se; Inserção à equerda: Aula 13 – Exclusão à direita Mestranda em Metodologias para o Ensino de Linguagens e suas Tecnologias Operação de exclusão à direita: Ref PaulaYRef Amanda Paula Fernando Amanda Fernando Ref Amanda Paula Fernando Y Paula P se (REF= ) ou (REF.PROX= ) então UNDERFLOW ; senão P := REF.PROX; Y := P.INFO; REF.PROX := P.PROX; se REF.PROX # então REF.PROX.ANT := REF; fim se; lib P; fim se; Operação de exclusão à direita: Yd LISTA Yd LISTA Ref Amanda Fernando Y Fernando P Operação de exclusão à direita: se (REF= ) ou (REF.PROX= ) então UNDERFLOW ; senão P := REF.PROX; Y := P.INFO; REF.PROX := P.PROX; se REF.PROX # então REF.PROX.ANT := REF; fim se; lib P; fim se; Aula 14 – Ponteiros em C# Especialista em Engenharia de Software com UML Variáveis : endereçam uma posição de memória que contem um determinado valor dependendo do seu tipo. Ex: (char, int, float, double, string...) Ponteiros: são variáveis cujo conteúdo é um endereço de memória. Assim, um ponteiro endereça uma posição na memória ou o endereço de memória; Neste endereço de memória pode-se chegar definitivamente ao valor ou ao seu conteúdo; Para declararmos um ponteiro, basta utilizar o operador *(asterisco) antes do nome da variável. Exemplo: int *p; Ponteiros são tipados, ou seja, devem ser classificados em um tipo e somente podem apontar para variáveis deste mesmo tipo. Para trabalharmos com ponteiros a linguagem C# disponibiliza os seguintes operadores: & - Fornece o endereço de memória onde está armazenado uma variável. Lê-se “o endereço de”. * - Valor armazenado na variável referenciada por um ponteiro. Lê-se “o valor apontado por”. Ponteiros: são variáveis cujo conteúdo é um endereço de memória. Assim, um ponteiro endereça uma posição de memória ou endereço de memória; Neste endereço de memória pode-se chegar definitivamente ao valor ou ao seu conteúdo; Aula 15 – Ponteiros em C# - Exemplo 1 Especialista em Engenharia de Software com UML void macedo () { int num,valor; int *p; num=55; p=# /* Pega o endereço de memória de num */ valor=*p; /* Valor é igualado a num de uma maneira indireta */ C.WL (valor); C.WL ("Endereço para onde o ponteiro aponta: " + p); C.WL ("Valor da variável apontada: " + *p); } Aula 16 – Ponteiros em C# - Exemplo 1 - Continuação Especialista em Engenharia de Software com UML void macedo () { int num,valor; int *p; num=55; p=# /* Pega o endereço de memória de num */ valor=*p; /* Valor é igualado a num de uma maneira indireta */ C.WL (valor); C.WL ("Endereço para onde o ponteiro aponta: " + p); C.WL ("Valor da variável apontada: " + *p); } Aula 17 – Ponteiros em C# - Exemplo 2 Especialista em Engenharia de Software com UML Igualando ponteiros: int *p1, *p2; p1=p2; Repare que estamos fazendo com que p1 apontepara o mesmo lugar que p2. A variável apontada por p1 terá o mesmo conteúdo da variável apontada por p2 *p1=*p2; void macedo () { int num,*p1, *p2; num=55; p1=# /* Pega o endereco de num */ p2=p1; /*p2 passa a apontar para o mesmo endereço apontado por p1 */ C.WL("Conteúdo de p1: " + p1); C.WL("Valor apontado por p1: " + *p1); C.WL("Conteúdo de p2: " + p2); C.WL("Valor apontado por p2: " + *p2); } Aula 18 – Ponteiros em C# - Exemplo 2 - Continuação Especialista em Engenharia de Software com UML void macedo () { int num,*p1, *p2; num=55; p1=# /* Pega o endereco de num */ p2=p1; /*p2 passa a apontar para o mesmo endereço apontado por p1 */ C.WL("Conteúdo de p1: " + p1); C.WL("Valor apontado por p1: " + *p1); C.WL("Conteúdo de p2: " + p2); C.WL("Valor apontado por p2: " + *p2); } Aula 19 – Ponteiros em C# - Exemplo 3 Especialista em Engenharia de Software com UML Incremento/Decremento: Apontar para o próximo valor do mesmo tipo para o qual o ponteiro aponta: long *aPtr, a=5; aPtr=&a; aPtr++; Qual será o valor endereçado por aPtr++ ?? Se aPtr é long, como o long ocupa 4 bytes, aPtr irá apontar para o endereço 0x00000104; Este é o principal motivo que nos obriga a definir um tipo para um ponteiro!!! void macedo () { int num; int *p; num=55; p=# C.WL("Conteúdo de p: " + p ); C.WL("Valor apontado por p: " + *p ); C.WL("Conteúdo de p incrementado: " + (++p)); C.WL("Val. apontado por p incrementado:"+*p); } Aula 20 – Ponteiros em C# - Exemplo 3 - Continuação Especialista em Engenharia de Software com UML void macedo () { int num; int *p; num=55; p=# C.WL("Conteúdo de p: " + p ); C.WL("Valor apontado por p: " + *p ); C.WL("Conteúdo de p incrementado: " + (++p)); C.WL("Val. apontado por p incrementado:"+*p); }
Compartilhar