Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "lista.h"
- void hallaMayor(TLista *lista){
- TNodo *ptrRec;
- TElemento num, max;
- int cont,contMax;
- max = 0;
- cont = 0;
- contMax = 0;
- ptrRec = lista->inicio;
- while (ptrRec !=NULL){
- cont++; // cont para hallar el indice
- num = ptrRec->elem;
- if (num>max){ // Nuevo maximo, guarda numero y posicion
- max = num;
- contMax = cont;
- }
- ptrRec = ptrRec->ptrSig;
- }
- printf("El numero mayor es : %d \n", max );
- printf("Su posicion en la lista es : %d \n", contMax );
- }
- void hallaMenorYVeces (TLista *lista){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- TElemento num,min;
- int cont;
- cont = 0;
- min = 100000; // Un valor constante, tipo MAX_INT
- while (ptrRec != NULL){
- num = ptrRec->elem;
- if (num == min) // Si es el mismo minimo, aumento el contador
- cont++;
- if (num<min){ // Nuevo minimo(primera aparicion), contador = 1
- min = num;
- cont = 1;
- }
- ptrRec = ptrRec->ptrSig;
- }
- printf("El numero minimo es: %d\n", min );
- printf("La cantidad de veces que se repite es : %d\n", cont );
- }
- void borraElemento(TLista* lista, TElemento elem){
- TNodo *ptrRec, *ptrAnt;
- TElemento num;
- ptrAnt = NULL;
- ptrRec = lista->inicio;
- while (ptrRec != NULL){
- num = ptrRec->elem;
- if (num == elem){ // Si es el elemento a eliminar
- if (num == lista->inicio->elem) // Si es el primero
- lista->inicio = lista->inicio->ptrSig;
- else // Si no es el primero
- ptrAnt->ptrSig = ptrRec->ptrSig;
- ptrRec = ptrRec->ptrSig;
- free(ptrRec);
- }else{ // Si no es el elemento a eliminar
- ptrAnt = ptrRec;
- ptrRec = ptrRec->ptrSig;
- }
- }
- }
- void reemplazaElemento(TLista *lista, TElemento ant, TElemento nuevo){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- while (ptrRec != NULL){
- if(ptrRec->elem == ant){ // Cada vez que lo encuentra, lo cambia
- ptrRec->elem = nuevo;
- }
- ptrRec = ptrRec->ptrSig;
- }
- }
- void imprimeSublista(TLista *lista, int ini, int fin){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- int cont,i;
- cont = 1;
- while (cont < ini){ // Avanzo hasta la posicion pedida
- cont++;
- ptrRec = ptrRec->ptrSig;
- }
- for (i=0;i<=(fin-ini);i++){ // For desde ini hasta fin para imprimir
- printf(" %d ",ptrRec->elem);
- ptrRec = ptrRec->ptrSig;
- }
- printf("\n");
- }
- void insertaFin(TLista *lista, TElemento elem){
- TNodo *ptrNuevo, *ptrRec;
- ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
- ptrNuevo->elem = elem;
- ptrNuevo->ptrSig = NULL;
- if (lista->inicio == NULL){ // Si la lista es vacia
- lista->inicio = ptrNuevo;
- }
- else{ // Si la lista no es vacia
- ptrRec = lista->inicio;
- while (ptrRec->ptrSig != NULL) // Encontrar el final
- ptrRec = ptrRec->ptrSig;
- ptrRec->ptrSig = ptrNuevo;
- }
- }
- TLista merge(TLista *l1, TLista *l2) {
- TNodo *ptrLista1, *ptrLista2;
- ptrLista1 = l1->inicio;
- ptrLista2 = l2->inicio;
- TLista listaFin;
- crearLista(&listaFin);
- //printf(&listaFin);
- while (ptrLista1 != NULL && ptrLista2 != NULL){
- // Ir avanzando los punteros cuando uno es menor que el otro
- if (ptrLista1->elem < ptrLista2->elem){
- //printf(" %d ",ptrLista1->elem);
- insertaFin(&listaFin,ptrLista1->elem);
- ptrLista1 = ptrLista1->ptrSig;
- }else{
- //printf(" %d ",ptrLista2->elem);
- insertaFin(&listaFin,ptrLista2->elem);
- ptrLista2 = ptrLista2->ptrSig;
- }
- }
- // Whiles para imprimir los elementos restantes, si los hubieran
- while (ptrLista1 != NULL){
- //printf(" %d ",ptrLista1->elem);
- insertaFin(&listaFin,ptrLista1->elem);
- ptrLista1 = ptrLista1->ptrSig;
- }
- while (ptrLista2 != NULL){
- //printf(" %d ",ptrLista2->elem);
- insertaFin(&listaFin,ptrLista2->elem);
- ptrLista2 = ptrLista2->ptrSig;
- }
- return listaFin;
- }
- /* PARA PROBAR */
- void crearLista(TLista *lista){
- lista->inicio = NULL;
- }
- void imprimeLista(TLista *lista){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- while (ptrRec != NULL){
- printf(" %d ",ptrRec->elem);
- ptrRec = ptrRec->ptrSig;
- }
- printf("NULL \n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement