Lista Ordenada

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1de 4

Lista Ordenada:

#include <iostream>
using namespace std;

typedef int TInfo;


typedef struct no {
TInfo info;
no *prox;
} TNo;
typedef TNo *PNo;

void criaLista(PNo *l) {


*l = NULL;
}

void insereListaOrdenada(PNo *l, TInfo dado) {


PNo p, q, r;
p = (PNo)malloc(sizeof(TNo));
p->info = dado;
p->prox = NULL;
if (*l) {
q = *l;
r = NULL;
while (q && dado > q->info) {
r = q;
q = q->prox;
}
if (r) {
if (q) {
p->prox = q;
}
r->prox = p;
} else {
p->prox = *l;
*l = p;
}
} else {
*l = p;
}
}

int eliminaListaOrdenada(PNo *l, TInfo dado) {


PNo p, q;
if (*l) {
p = *l;
q = NULL;
while (p && dado > p->info) {
q = p;
p = p->prox;
}
if (p) {
if (dado == p->info) {
if (q) {
q->prox = p->prox;
} else {
*l = p->prox;
}
free(p);
return 1;
} else {
return 0;
}
} else {
return 0;
}
} else {
return 0;
}
}

PNo buscaListaOrdenada(PNo l, TInfo dado) {


PNo p;
if (l) {
p = l;
while (p && dado > p->info) {
p = p->prox;
}
if (p) {
if (dado == p->info) {
return p;
} else {
return NULL;
}
} else {
return NULL;
}
} else {
return NULL;
}
}

void mostraLista(PNo l) {
cout << "Lista:";
while (l) {
cout << " " << l->info;
l = l->prox;
}
}

void terminaLista(PNo *l) {


PNo p;
while (*l) {
p = *l;
*l = p->prox;
free(p);
}
}

int main() {

PNo lista, aux;

cout << endl << "Criando Lista...";


criaLista(&lista);
cout << endl << "Criado!" << endl;

cout << endl << "Inserindo Lista...";


insereListaOrdenada(&lista, 10);
insereListaOrdenada(&lista, 20);
insereListaOrdenada(&lista, 30);
//insereListaOrdenada(&lista, 35);
cout << endl << "Inserido!" << endl;
cout << endl << "Mostrando Lista..." << endl;
mostraLista(lista);
cout << endl << "Mostrado!" << endl;
/*
cout << endl << "Excluindo Lista..." << endl;
if (eliminaListaOrdenada(&lista, 30)) {
cout << "Valor retirado!";
} else {
cout << "VALOR NAO ENCONTRADO!";
}
cout << endl << "Excluido!" << endl;
cout << endl << "Mostrando Lista..." << endl;
mostraLista(lista);
cout << endl << "Mostrado!" << endl;
*/
cout << endl << "BUSCANDO Lista..." << endl;
if (aux = buscaListaOrdenada(lista, 20)) {
cout << "Valor encontrado: " << aux->info;
} else {
cout << "VALOR NAO ENCONTRADO!";
}
cout << endl << "Buscado!" << endl;

cout << endl << "Terminando Lista...";


terminaLista(&lista);
cout << endl << "Terminado!" << endl;
cout << endl << "Mostrando Lista..." << endl;
mostraLista(lista);
cout << endl << "Mostrado!" << endl;

cout << endl << "*****" << endl;


return 0;

Você também pode gostar