Ir ao conteúdo
  • Cadastre-se

Vetor de Lista =)


Plástico Bolha

Posts recomendados

Oi pessoal, eu tenho que fazer um vetor ... E esse vetor tem que ser alocado dinâmicamente ... Cada linha desse vetor tem que ser uma lista ... E esse vetor então se transformará em uma matriz de "NÓ(s)" !!! E após eu criar essa matriz de NÓ(s) eu tenho que joga-la em funções que manipulem esse "vetor de listas" ... Então por exemplo o usuário tem que ter liberdade de sair do índice 0 a qualquer momento e ir para o índice 7 e inserir ou remover sei la o que ele deseja ... E depois voltar para o índice 0 e tentar remover ou imprimir todos os elementos daquele índice e depois ir para o índice 4 etc ...

A vantagem é ter um vetor com colunas que só vão acabar quando a memória do PC acabar =P. Se a memória fosse infinita teriamos um vetor com colunas infinitas :lol:.

Eu ja criei as funções para manipular a lista ... Mas agora eu vou ter que adaptar essas funções para em vez de receber "UMA LISTA" receber um índice de um vetor que possuirá "UMA LISTA", no final não vai mudar muita coisa porque as funções vão receber uma lista de qualquer jeito só o que muda é que essa lista agora vai estar dentro de um vetor. Então acredito que as funções não vão sofrer grandes mudanças ...

Então segue o que eu fiz até agora ... ^_^


#include <stdlib.h>

typedef struct NO{
NO* prox;
float dado;
}NO;

typedef struct listaL{
NO* pra mim;
NO* ULT;
}listaL;

listaL *crial(){
listaL *l = (listaL*) malloc(sizeof(listaL));
l->pra mim = NULL;
l->ULT = NULL;
return l;
}

void insereP(listaL *l){
printf("\nInsere Primeiro\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
NO *p=(NO*) malloc(sizeof(NO));
p->prox = l->pra mim;
l->pra mim = p;
p->dado = dado;
if(l->ULT == NULL){
l->ULT = p;
}
else{
NO* j;
NO *aux;
j = l->pra mim;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
}
}while(dado >= 0);
return;
}

void imprime(listaL *l){
NO* j;
j = l->pra mim;
printf("\n\nImprimir\n\n");
while(j != NULL){
printf("Elemento da lista: %.0f\n\n", j->dado);
j = j->prox;
}
}

int insereD(NO* x, NO* R, int dado){
R->prox = x->prox;
x->prox=R;
R->dado = dado;
return 0;
}


int insereU(listaL *l){
float dado;
printf("\nInsere Ultimo\n\n");
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
NO* R=(NO*) malloc(sizeof(NO));

if(l->pra mim == NULL){
R->prox =NULL;
l->ULT = R;
l->pra mim = R;
R->dado = dado;
}
else{
NO* j;
NO *aux;
j = l->pra mim;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
j->prox = R;
R->dado = dado;
R->prox = NULL;
l->ULT = R;
}
}while(dado >= 0);
return 0;
}


void insereO(listaL *l){
printf("\nInsere Ordenado\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;

if(l->pra mim == NULL){
NO* R=(NO*) malloc(sizeof(NO));
R->prox =NULL;
l->ULT = R;
l->pra mim = R;
R->dado = dado;
}
else{
int flag = 0;
NO* R=(NO*) malloc(sizeof(NO));
NO* j;
NO *aux;
j = l->pra mim;
aux = j;
while(j != NULL){
if(dado > aux->dado){
insereD(aux, R, dado);
printf("\nO dado %2.f foi adicionado\n\n", dado);
flag = -1;
break;
}
aux = j;
j = j->prox;
}
if(flag == 0){
if(dado > aux->dado){
insereD(aux, R, dado);
printf("\nO dado %2.f foi adicionado\n\n", dado);
}

}
}

}while(dado >= 0);
NO* j;
NO *aux;
j = l->pra mim;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return;
}

bool Vazia(listaL *l) {
if (l->pra mim == NULL)
return true;
else
return false;
}

int RemoveP(listaL *l){
int escolha;
printf("\nRemover Primeiro\n\n");
printf("Digite 1 para remover e -1 para sair\n");

while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);
if(escolha == 1){
if(!Vazia(l)) {
NO* x = l->pra mim;
l->pra mim = l->pra mim->prox;
printf("\nO dado %2.f foi removido\n", x->dado);
free(x);
}
else{
printf("\nLista Vazia !!!\n");
break;
}

}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}
}
return 0;
}

int RemoveU(listaL* l){
int escolha;
printf("\nRemover Ultimo\n\n");
printf("Digite 1 para remover e -1 para sair\n");
while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);

if(escolha == 1){
if(!Vazia(l)){
int flag = 0;
NO* j;
NO *aux;
j = l->pra mim;
aux = j;
while(j->prox != NULL){
flag = -1;
aux = j;
j = j->prox;
}
j = aux;
if(flag == -1){
printf("\nO dado %2.f foi removido\n", j->prox->dado);
j->prox=NULL;
free(j->prox);
}
else if(flag == 0){printf("\nO dado %2.f foi removido\n", l->pra mim->dado); free(l->pra mim->prox); l->pra mim = NULL;}
}
else{
printf("\nLista Vazia !!!\n");
break;
}
}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}

}
NO* j;
NO *aux;
j = l->pra mim;
aux = l->pra mim;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return 0;

}

float RetornaU(listaL* l){
if(l->ULT == NULL) return NULL;
return l->ULT->dado;
}

int main(){
listaL *l = crial();

int escolha = 1;
printf("OBS: Para sair das funcoes digite um numero negativo !!!\n\n");
while (escolha != 8){

printf("\n\n ----------------------- ");

printf("\n 1 - Inserir Primeiro ");
printf("\n 2 - Inserir Ultimo ");
printf("\n 3 - Inserir Ordenado ");
printf("\n 4 - Remover Primeiro ");
printf("\n 5 - Remover Ultimo ");
printf("\n 6 - Retornar Ultimo ");
printf("\n 7 - Imprimir ");
printf("\n 8 - Sair ");
printf("\n\n Escolha uma opcao: ");
scanf("%d", &escolha);


switch (escolha) {
case 1:
{
insereP(l);
printf("\n\n");
break;
}
case 2:
{
insereU(l);
printf("\n\n");
break;
}
case 3:
{
insereO(l);
printf("\n\n");
break;
}
case 4:
{
RemoveP(l);
printf("\n\n");
break;
}
case 5:
{
RemoveU(l);
printf("\n\n");
break;
}
case 6:
{
printf("\n %2.f\n\n", RetornaU(l));
break;
}
case 7:
{
imprime(l);
printf("\n\n");
break;
}
default:
printf("\n Opcao Invalida !!!\n");
}

}

return 0;
}
#include <stdio.h>

Agradeço quem puder ajudar !

Link para o comentário
Compartilhar em outros sites

Gostaria de dicas e idéias de implementar a lista de vetor as funções da melhor maneira possivel. Porque as vezes eu posso ter uma ideia de como fazer isso, mas essa ideia pode não ser tão boa quanto outra ideia de fazer a mesma coisa com mais simplicidade e desempenho etc etc ...

E pior que aonde é "NO* pra mim;" é na verdade"

NO* l->pra mim
" Só que distorceu =( ...
Link para o comentário
Compartilhar em outros sites

Eu refiz a função insere ordenado e criei a função que cria um vetor de listas ... Esta praticamente feito postei só pra compartilhar.


#include <stdlib.h>

typedef struct NO{
NO* prox;
float dado;
}NO;

typedef struct listaL{
NO* Prime;
NO* ULT;
}listaL;

listaL *crial(){
listaL *l = (listaL*) malloc(sizeof(listaL));
l->Prime = NULL;
l->ULT = NULL;
return l;
}

void insereP(listaL *l){
printf("\nInsere Primeiro\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
NO *p=(NO*) malloc(sizeof(NO));
p->prox = l->Prime;
l->Prime = p;
p->dado = dado;
if(l->ULT == NULL){
l->ULT = p;
}
else{
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
}
}while(dado >= 0);
return;
}

void imprime(listaL *l){
NO* j;
j = l->Prime;
printf("\n\nImprimir\n\n");
while(j != NULL){
printf("Elemento da lista: %.0f\n\n", j->dado);
j = j->prox;
}
}

int insereD(NO* x, NO* R, int dado){
R->prox = x->prox;
x->prox=R;
R->dado = dado;
return 0;
}


int insereU(listaL *l){
float dado;
printf("\nInsere Ultimo\n\n");
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
NO* R=(NO*) malloc(sizeof(NO));

if(l->Prime == NULL){
R->prox =NULL;
l->ULT = R;
l->Prime = R;
R->dado = dado;
}
else{
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
j->prox = R;
R->dado = dado;
R->prox = NULL;
l->ULT = R;
}
}while(dado >= 0);
return 0;
}


NO* MAIOR(listaL* l){
float maior = l->Prime->dado;
NO* j;
NO *aux;
j = l->Prime;
aux = j;
while(j != NULL){
aux = j;
if(maior < aux->dado) maior = aux->dado;
j = j->prox;
}

if(maior < aux->dado) maior = aux->dado;


j = l->Prime;
aux = j;
while(j != NULL){
aux = j;
if(maior == aux->dado) return aux;
j = j->prox;
}

if(maior == aux->dado) return aux;
}


void insereO(listaL *l){
printf("\nInsere Ordenado\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;

if(l->Prime == NULL){
NO* R=(NO*) malloc(sizeof(NO));
R->prox =NULL;
l->ULT = R;
l->Prime = R;
R->dado = dado;
}
else{
NO* x = MAIOR(l);
if(dado >= x->dado){
NO* R = (NO*) malloc(sizeof(NO));
insereD(x, R, dado);
}
else
printf("\n\nDigite um valor igual ou maior que %2.f\n", x->dado);
}

}while(dado >= 0);
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return;
}

bool Vazia(listaL *l) {
if (l->Prime == NULL)
return true;
else
return false;
}

int RemoveP(listaL *l){
int escolha;
printf("\nRemover Primeiro\n\n");
printf("Digite 1 para remover e -1 para sair\n");

while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);
if(escolha == 1){
if(!Vazia(l)) {
NO* x = l->Prime;
l->Prime = l->Prime->prox;
printf("\nO dado %2.f foi removido\n", x->dado);
free(x);
}
else{
printf("\nLista Vazia !!!\n");
break;
}

}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}
}
return 0;
}

int RemoveU(listaL* l){
int escolha;
printf("\nRemover Ultimo\n\n");
printf("Digite 1 para remover e -1 para sair\n");
while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);

if(escolha == 1){
if(!Vazia(l)){
int flag = 0;
NO* j;
NO *aux;
j = l->Prime;
aux = j;
while(j->prox != NULL){
flag = -1;
aux = j;
j = j->prox;
}
j = aux;
if(flag == -1){
printf("\nO dado %2.f foi removido\n", j->prox->dado);
j->prox=NULL;
free(j->prox);
}
else if(flag == 0){printf("\nO dado %2.f foi removido\n", l->Prime->dado); free(l->Prime->prox); l->Prime = NULL;}
}
else{
printf("\nLista Vazia !!!\n");
break;
}
}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}

}
NO* j;
NO *aux;
j = l->Prime;
aux = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return 0;

}

float RetornaU(listaL* l){
if(l->ULT == NULL) return NULL;
return l->ULT->dado;
}





listaL **CRIALL(int N){
listaL **O;
O = (listaL **) malloc(N*sizeof(listaL*));
for(int i = 0; i < N; i++){
O[i] = (listaL *) malloc(sizeof(listaL*));
O[i]->Prime= NULL;
O[i]->ULT= NULL;
}
return O;
}




int main(){
listaL *l = crial();

int escolha = 1;
printf("OBS: Para sair das funcoes digite um numero negativo !!!\n\n");
while (escolha != 8){

printf("\n\n ----------------------- ");

printf("\n 1 - Inserir Primeiro ");
printf("\n 2 - Inserir Ultimo ");
printf("\n 3 - Inserir Ordenado ");
printf("\n 4 - Remover Primeiro ");
printf("\n 5 - Remover Ultimo ");
printf("\n 6 - Retornar Ultimo ");
printf("\n 7 - Imprimir ");
printf("\n 8 - Sair ");
printf("\n\n Escolha uma opcao: ");
scanf("%d", &escolha);


switch (escolha) {
case 1:
{
insereP(l);
printf("\n\n");
break;
}
case 2:
{
insereU(l);
printf("\n\n");
break;
}
case 3:
{
insereO(l);
printf("\n\n");
break;
}
case 4:
{
RemoveP(l);
printf("\n\n");
break;
}
case 5:
{
RemoveU(l);
printf("\n\n");
break;
}
case 6:
{
printf("\n %2.f\n\n", RetornaU(l));
break;
}
case 7:
{
imprime(l);
printf("\n\n");
break;
}
default:
if(escolha != 8) printf("\n Opcao Invalida !!!\n");
}

}

return 0;
}
#include <stdio.h>

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Essa é a tarefa concluida ... Da parte de lista. Postei mais uma vez pra compartilhar ... =)

.CPP


#include <stdlib.h>
#include "Lista.h"


int main(){
listaL *l = crial();
int N;
int i;
int escolha = 1;

printf("Quantas linhas deseja criar para a matriz esparsa ? ");

scanf("%d", &N);
printf("\n");
if(N <= 0 ) {
printf("Digite um numero maior que 0\n");
system("PAUSE");
return 0;
}
listaL **VL = CRIALL(N);

printf("OBS: Para sair das funcoes digite um numero negativo !!!\n\n");
while (escolha != 13){

printf("Selecione uma linha entre 0 e %d: ", N-1);


printf("\n\nEscolha a linha: ");
scanf("%d", &i);
if((i < 0) || (i > N-1)) {
printf("Digite um numero entre 0 e %d\n", N-1);
system("PAUSE");
return 0;
}

VL[i];
imprimeT(VL, N);
printf("\n\n ----------------------- ");

printf("\n Linha %d selecionada. voce pode: \n ", i);
printf("\n 1 - Inserir Primeiro ");
printf("\n 2 - Inserir Ultimo ");
printf("\n 3 - Inserir Ordenado ");
printf("\n 4 - Remover Primeiro ");
printf("\n 5 - Remover Ultimo ");
printf("\n 6 - Retornar Ultimo ");
printf("\n 7 - Imprimir ");
printf("\n 8 - Imprimir Tudo ");
printf("\n 9 - Seta Valor ");
printf("\n 10 - Retornar Posicao ");
printf("\n 11 - Seta valor como nulo");
printf("\n 12 - Conta Valores validados ");
printf("\n 13 - Sair ");
printf("\n\n Escolha uma opcao: ");
scanf("%d", &escolha);


switch (escolha) {
case 1:
{
printf("\nInsere Primeiro\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
insereP(VL[i],dado);
}while(dado >= 0);
printf(" \n\n");
imprimeT(VL, N);
break;
}
case 2:
{
printf("\nInsere Ultimo\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
insereU(VL[i],dado);
}while(dado >= 0);
printf("\n\n");
imprimeT(VL, N);
break;
}
case 3:
{
printf("\nInsere Ordenado\n\n");
float dado;
do{
printf("Digite o dado: ");
scanf("%f", &dado);
if(dado < 0) break;
insereO(VL[i], dado);
}while(dado >= 0);
printf("\n\n");
imprimeT(VL, N);
break;
}
case 4:
{
RemoveP(VL[i]);
printf("\n\n");
break;
}
case 5:
{
RemoveU(VL[i]);
printf("\n\n");
break;
}
case 6:
{
printf("\n %2.f\n\n", RetornaU(VL[i]));
break;
}
case 7:
{
imprime(VL[i]);
printf("\n\n");
break;
}
case 8:
{
imprimeT(VL, N);
printf("\n\n");
break;
}
case 9:
{
imprimeT(VL, N);
int i, j;
float dado;
printf("\nEscolha um numero para linha: ");
scanf("%d", &i);
printf("\nEscolha um numero para coluna: ");
scanf("%d", &j);
printf("\nEscolha o dado a ser inserido na posicao: ");
scanf("%f", &dado);
setaValor(VL, i, j, N, dado);
imprimeT(VL, N);
break;
}
case 10:
{
imprimeT(VL, N);
int i, j;
float R;
printf("\nEscolha um numero para linha: ");
scanf("%d", &i);
printf("\nEscolha um numero para coluna: ");
scanf("%d", &j);
R = RetornaE(VL, i, j, N);
printf("\nO elemento que esta na posicao %d, %d e: %2.f\n\n", i,j,R);
break;
}
case 11:
{
imprimeT(VL, N);
int i, j;
printf("\nEscolha um numero para linha: ");
scanf("%d", &i);
printf("\nEscolha um numero para coluna: ");
scanf("%d", &j);
setanulo(VL, i, j, N);
imprimeT(VL, N);
break;
}
case 12:
{
int R;
R = contaV(VL,N);
printf(" \nO numero de valores validos e: %d\n\n", R);
break;
}
default:
if (escolha != 13) printf("\n Opcao Invalida !!!\n");
}

}
system("PAUSE");
return 0;
}
#include <stdio.h>

.H


NO* prox;
float dado;
}NO;

typedef struct listaL{
NO* Prime;
NO* ULT;
}listaL;

listaL *crial(){
listaL *l = (listaL*) malloc(sizeof(listaL));
l->Prime = NULL;
l->ULT = NULL;
return l;
}

void insereP(listaL *l, int dado){
NO *p=(NO*) malloc(sizeof(NO));
p->prox = l->Prime;
l->Prime = p;
p->dado = dado;
if(l->ULT == NULL){
l->ULT = p;
}
else{
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
}
return;
}

void imprime(listaL *l){
NO* j;
j = l->Prime;
printf("\n\nImprimir\n\n");
while(j != NULL){
if(j->dado >= 0) printf("Elemento da lista: %.0f\n\n", j->dado);
j = j->prox;
}
}

void imprimeT(listaL **VL, int N){
printf("\n\nImprimir Todos os elementos\n\n");
printf("--------------------------------------");
for(int i = 0; i < N; i++){
printf("\n");
NO* j;
j = VL[i]->Prime;
printf("Linha[%d]: ", i);
while(j != NULL){
if(j->dado >= 0) {
printf("%.0f, ", j->dado);
}
else{
printf(" , ");
}
j = j->prox;
}
}
printf("\n--------------------------------------\n");
}

int insereD(NO* x, NO* R, int dado){
R->prox = x->prox;
x->prox=R;
R->dado = dado;
return 0;
}


int insereU(listaL *l, float dado){
NO* R=(NO*) malloc(sizeof(NO));
if(l->Prime == NULL){
R->prox =NULL;
l->ULT = R;
l->Prime = R;
R->dado = dado;
}
else{
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
j->prox = R;
R->dado = dado;
R->prox = NULL;
l->ULT = R;
}
return 0;
}

NO* insereUM(listaL *l, int C){
NO* R=(NO*) malloc(sizeof(NO));

if(l->Prime == NULL){
R->prox =NULL;
l->ULT = R;
l->Prime = R;
R->dado = -1;
return l->Prime;
}
else{
NO* j;
NO *aux;
j = l->Prime;
if(j->dado == -1) {
int x=0;
while(x != C){
aux = j;
j = j->prox;
x++;
}
j = aux;
return j;
}
else{
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
j->prox = R;
R->prox = NULL;
l->ULT = R;
R->dado = -1;
return j;
}
}

}
NO* criano(){
NO* R = (NO*) malloc(sizeof(NO));
R->prox;
return R;
}

int setanulo(listaL **VL, int i, int j, int N){
printf("\nSetar Nulo\n\n");
if(i > N-1 ){
printf("\nDigite um numero igual ou menor que %d\n", N-1);
system("PAUSE");
exit(-1);
}

if(i < 0 ){
printf("Digite um i positivo\n");
system("PAUSE");
exit(-1);
}

if(j < 0 ) {
printf("Digite um j positivo\n");
system("PAUSE");
exit(-1);
}

int x=0;
NO* NA;
NA = VL[i]->Prime;
j;
while(x != j){

if(VL[i]->Prime == NULL){
NO* R = (NO*) malloc(sizeof(NO));
VL[i]->Prime = R;VL[i]->pra mim = R;
VL[i]->Prime = R;
R->dado = -1;
R->prox = NULL;
NA = R;
--x;
}
else if(NA->prox == NULL){
NA->prox = (NO*) malloc(sizeof(NO));
NA = NA->prox;
NA->prox = NULL;
NA->dado = -1;
}
else{
NA = NA->prox;
}
x++;
}
j;
if(j == 0){
insereP(VL[i], 0);
return 0;
}
else{
NA->dado=0;
}

NO* J;
NO *aux2;
J = VL[i]->Prime;
while(J != NULL){
aux2 = J;
J = J->prox;
}
J = aux2;
VL[i]->ULT = J;
return 0;
}

NO* DMAIOR(listaL* l){
float maior = l->Prime->dado;
NO* j;
NO *aux;
j = l->Prime;
aux = j;
while(j != NULL){
aux = j;
if(maior < aux->dado) maior = aux->dado;
j = j->prox;
}

if(maior < aux->dado) maior = aux->dado;


j = l->Prime;
aux = j;
while(j != NULL){
aux = j;
if(maior == aux->dado) return aux;
j = j->prox;
}

if(maior == aux->dado) return aux;
}

NO* AMAIOR(listaL* l,int dado){
NO* j;
NO *aux;
j = l->Prime;
aux = j;
while(j != NULL){
aux = j;
if(dado > aux->dado) {
if(dado <= aux->prox->dado)
return aux;
}
j = j->prox;
}
}

void insereO(listaL *l, float dado){
if(l->Prime == NULL){
NO* R=(NO*) malloc(sizeof(NO));
R->prox =NULL;
l->ULT = R;
l->Prime = R;
R->dado = dado;
}
else{
NO* x = DMAIOR(l);
if(dado >= x->dado){
NO* R = (NO*) malloc(sizeof(NO));
insereD(x, R, dado);
}
else{
if(l->Prime->dado > dado){

NO *p=(NO*) malloc(sizeof(NO));
p->prox = l->Prime;
l->Prime = p;
p->dado = dado;
if(l->ULT == NULL){
l->ULT = p;
}
else{
NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
}

}
else{
NO* x = AMAIOR(l,dado);
NO* R = (NO*) malloc(sizeof(NO));
insereD(x, R, dado);
}
}
}

NO* j;
NO *aux;
j = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return;
}

bool Vazia(listaL *l) {
if (l->Prime == NULL)
return true;
else
return false;
}

int RemoveP(listaL *l){
int escolha;
printf("\nRemover Primeiro\n\n");
printf("Digite 1 para remover e -1 para sair\n");

while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);
if(escolha == 1){
if(!Vazia(l)) {
NO* x = l->Prime;
l->Prime = l->Prime->prox;
printf("\nO dado %2.f foi removido\n", x->dado);
free(x);
}
else{
printf("\nLista Vazia !!!\n");
break;
}

}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}
}
return 0;
}

int RemoveU(listaL* l){
int escolha;
printf("\nRemover Ultimo\n\n");
printf("Digite 1 para remover e -1 para sair\n");
while(1){
printf("\n\nEscolha uma opcao: ");
scanf("%d", &escolha);

if(escolha == 1){
if(!Vazia(l)){
int flag = 0;
NO* j;
NO *aux;
j = l->Prime;
aux = j;
while(j->prox != NULL){
flag = -1;
aux = j;
j = j->prox;
}
j = aux;
if(flag == -1){
printf("\nO dado %2.f foi removido\n", j->prox->dado);
j->prox=NULL;
free(j->prox);
}
else if(flag == 0){printf("\nO dado %2.f foi removido\n", l->Prime->dado); free(l->Prime->prox); l->Prime = NULL;}
}
else{
printf("\nLista Vazia !!!\n");
break;
}
}
else if(escolha == -1){
break;
}
else{
printf("\nEscolha outro numero\n");
continue;
}

}
NO* j;
NO *aux;
j = l->Prime;
aux = l->Prime;
while(j != NULL){
aux = j;
j = j->prox;
}
j = aux;
l->ULT = j;
return 0;

}

float RetornaU(listaL* l){
if(l->ULT == NULL) return NULL;
return l->ULT->dado;
}




listaL **CRIALL(int N){
listaL **O;
O = (listaL **) malloc(N*sizeof(listaL*));
for(int i = 0; i < N; i++){
O[i] = (listaL *) malloc(sizeof(listaL*));
O[i]->Prime= NULL;
O[i]->ULT= NULL;
}
return O;
}



float RetornaE(listaL **VL, int i, int j, int N){
printf("\nRetornar Elemento da posicao\n\n");
if(i > N-1 ) {
printf("Digite um numero igual ou menor que %d\n", N-1);
system("PAUSE");
exit(-1);
}

if(i < 0 ) {
printf("Digite um i positivo\n");
system("PAUSE");
exit(-1);
}

if(j < 0 ) {
printf("Digite um j positivo\n");
system("PAUSE");
exit(-1);
}

VL[i];
int x=0;
NO* aux1;
NO *aux2;

if(VL[i]->Prime == NULL)
return 0;

aux1 = VL[i]->Prime;
aux2 = aux1;
while(x != j){
if(aux1 == NULL){
return 0;
}
aux2 = aux1;
aux1 = aux1->prox;
x++;
}
if(aux1 != NULL){
return aux1->dado;
}
else{
return 0;
}
}



int setaValor(listaL **VL, int i, int j, int N, float dado){
if(dado < 0){
printf("\nDigite um dado maior que 0 !!!\n\n");
return 0;
}
printf("\nSetar Nulo\n\n");
if(i > N-1 ){
printf("\nDigite um numero igual ou menor que %d\n", N-1);
system("PAUSE");
exit(-1);
}

if(i < 0 ){
printf("Digite um i positivo\n");
system("PAUSE");
exit(-1);
}

if(j < 0 ) {
printf("Digite um j positivo\n");
system("PAUSE");
exit(-1);
}

int x=0;
NO* NA;
NA = VL[i]->Prime;
j;
while(x != j){

if(VL[i]->Prime == NULL){
NO* R = (NO*) malloc(sizeof(NO));
VL[i]->Prime = R;VL[i]->Prime = R;
VL[i]->Prime = R;
R->dado = -1;
R->prox = NULL;
NA = R;
--x;
}
else if(NA->prox == NULL){
NA->prox = (NO*) malloc(sizeof(NO));
NA = NA->prox;
NA->prox = NULL;
NA->dado = -1;
}
else{
NA = NA->prox;
}
x++;
}
j;
if(j == 0){
insereP(VL[i], 0);
return 0;
}
else{
NA->dado=dado;
}

NO* J;
NO *aux2;
J = VL[i]->Prime;
while(J != NULL){
aux2 = J;
J = J->prox;
}
J = aux2;
VL[i]->ULT = J;
return 0;
}




int contaV(listaL **VL, int N){
int cont=0;
for(int i = 0; i < N; i++){
NO* j;
j = VL[i]->Prime;
while(j != NULL){
if(j->dado >= 0 ) ++cont;
j = j->prox;
}
}
return cont;
}
typedef struct NO{

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!