Você está na página 1de 5

Int class (no **list)

{
Corrente = (no*)malloc(syzeof(no));
enterdata();
Achou = 0;
Axuliar = inicio;

If (inicio == null)
{
Inicio = corente;
Auxiliar = corente;
Corente -> = null;
prinft ("inserido o primeiro item na lista...\n");
system("passe");
achou = 1;
} else{
if (corrente -> codigo < auxiliar -> codigo)
{
corrente -> next = auxiliar;
Inicio = corrente;
Achou = 1;
printf("elemento precede o primeiro da lista...\n")
system("pause");
}else{
Auxiliar = auxiliar -> next;
while(auxiliar 2 != null)
{
if (corrente -> > auxiliar -> && corrente -> < auxiliar -> codigo)
{
auxiliar ->next = corrente;
Corrente -> next = auxiliar;
Achou = 1;
printf("elememento inserido no meio da lista... \n");
system("pause");
Break;
}else{
Auxiliar = auxiliar -> next;
Auxiliar2 = auxiliar2-> next;
}
}
if( achou == 0 && corrente-> codigo > auxiliar -> codigo)
{
Auxiliar -> next = corrente;
Corrente -> next = null;
Prinft (“elementos inseridos no final da lista);
system(“pause”);
}

If shcmp(corrente ->next, auxiliar ->next) <-1

Lista Duplamente encadeada

A lista duplamente encadeada é a base para as demais estruturas que veremos a frente.

Al lista duplamente permitie operacionalizar os ponteiros em dois sentidos permitindo flexibiliza


as operações de buscas ou recuperação dos dados.

Quando a sua estrutura possui pouca diferença em relação a lista simplesmente conforme
exemplo abaixo:

Typedef struct no
{
Int codigo;
Char nome[10];
Struct no *next, *back;
}no;

Portanto o no leria a seguinte configuração. (Retardado dividido em 3 com back/next e o meio)

Este novo campo permite fazer o duplo encadeamento conforme exemplo abaixo:

A C
(30)(120)
[||] [||]
#include <stdio.h>
#include <stdlib.h>

int main()
{
struct Tpreg{
char nome[25];
char nomeE[25];
void *back, *next;
};

typedef struct Tpreg registro;


registro *Auxiliar, *Anterior, *Atual, *Fim, *Inicio, *Proximo;
Auxiliar = Inicio = Fim = Anterior = NULL;
registro* busca(){
char nomeE[25];
int achou = 0;
scanf("%s", nomeE);
Anterior = Atual->back;
while(Atual != NULL && achou == 0){
if(strcmp(nomeE,Atual->nome)==0){
achou = 1;
}else{
if(strcmp( nomeE,Atual->nome)>0){
Atual = Anterior;
Anterior = Atual->back;
}else{
Atual=Atual->next;
Anterior = Atual->back;
}
}
}
return Atual;}

void inserir(){
char nomeE[25];
Auxiliar = (registro*) malloc(sizeof(registro));
scanf("%s", Auxiliar->nomeE);
Auxiliar->next=NULL;
Auxiliar->back=NULL;
if(Atual==NULL){
Atual = Auxiliar;
}else{
Anterior = Atual->back;
while(Atual != NULL){
if(strcmp(nomeE, Atual->nome)>0 && strcmp(nomeE,
Anterior->nome)<0){
Anterior->next=Auxiliar;
Auxiliar->back=Anterior;
Atual->back=Auxiliar;
Auxiliar->next=Atual;
}else if(strcmp(nomeE, Anterior->nome)>0){
Atual = Anterior;
Anterior = Atual->back;
}else{
Atual = Atual->next;
Anterior=Atual->back;
}
}
}
}

SIMULADO PARA PROVA

1) O que uma variável dinâmica armazena?


2) Quais as modalidades de ponteiro bem como suas funções?
3) O que significa estas semanticas:
Auxiliar = corrente->next;
auxiliar=corrente;
Corrente= corrente->next;
4) Como ocorre alocação de dados pelo malloc, e como ocorre o acesso aos dados?
5) Converta uma lista duplamente em circular
6) Qual a diferença entre variavel dinamica em relação a estatica?
7) Quais operações são permitidas em listas?
8) Em que aplicações encontramos as listas no gerenciamento computacional?
9) O sincronismo ocorre em que operações na lista?
10) O comando Malloc e NULL são comando imperativos. Explique suas funções?
https://pt.slideshare.net/MatheusSantosAlmeida/lista-duplamente-encadeada

Você também pode gostar