Sei sulla pagina 1di 19

void Insertar(Lista *lista, int v) {

pNodo nodo;

// Creamos un nodo para el nuvo valor a insertar


nodo = (pNodo)malloc(sizeof(tipoNodo));
nodo->valor = v;

// Si la lista está vacía, la lista será el nuevo nodo


// Si no lo está, insertamos el nuevo nodo a continuación del
apuntado
// por lista
if(*lista == NULL) *lista = nodo;
else nodo->siguiente = (*lista)->siguiente;
// En cualquier caso, cerramos la lista circular
(*lista)->siguiente = nodo;
}

if((*lista)->siguiente->valor != v) *lista = (*lista)->siguiente;


} while((*lista)->siguiente->valor != v && *lista != nodo);
// Si existe un nodo con el valor v:
if((*lista)->siguiente->valor == v) {
// Y si la lista sólo tiene un nodo
if(*lista == (*lista)->siguiente) {
// Borrar toda la lista
free(*lista);
*lista = NULL;
}
else {
// Si la lista tiene más de un nodo, borrar el nodo de valor
v
nodo = (*lista)->siguiente;
(*lista)->siguiente = nodo->siguiente;
free(nodo);
}
}
}
#include <stdio.h>

typedef struct _nodo {


int valor;
struct _nodo *siguiente;
} tipoNodo;

typedef tipoNodo *pNodo;


typedef tipoNodo *Lista;

// Funciones con listas:


void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);
void BorrarLista(Lista *);
void MostrarLista(Lista l);
int main() {
Lista lista = NULL;
pNodo p;

Insertar(&lista, 10);
Insertar(&lista, 40);
Insertar(&lista, 30);
Insertar(&lista, 20);
Insertar(&lista, 50);

MostrarLista(lista);

Borrar(&lista, 30);
Borrar(&lista, 50);

MostrarLista(lista);

BorrarLista(&lista);
return 0;
}

void Insertar(Lista *lista, int v) {


pNodo nodo;

// Creamos un nodo para el nuvo valor a insertar


nodo = (pNodo)malloc(sizeof(tipoNodo));
nodo->valor = v;

// Si la lista está vacía, la lista será el nuevo nodo


// Si no lo está, insertamos el nuevo nodo a continuación del
apuntado
// por lista
if(*lista == NULL) *lista = nodo;
else nodo->siguiente = (*lista)->siguiente;
// En cualquier caso, cerramos la lista circular
(*lista)->siguiente = nodo;
}

void Borrar(Lista *lista, int v) {


pNodo nodo;

nodo = *lista;

// Hacer que lista apunte al nodo anterior al de valor v


do {
if((*lista)->siguiente->valor != v) *lista = (*lista)-
>siguiente;
} while((*lista)->siguiente->valor != v && *lista != nodo);
// Si existe un nodo con el valor v:
if((*lista)->siguiente->valor == v) {
// Y si la lista sólo tiene un nodo
if(*lista == (*lista)->siguiente) {
// Borrar toda la lista
free(*lista);
*lista = NULL;
}
else {
// Si la lista tiene más de un nodo, borrar el nodo de valor
v
nodo = (*lista)->siguiente;
(*lista)->siguiente = nodo->siguiente;
free(nodo);
}
}
}

void BorrarLista(Lista *lista) {


pNodo nodo;

// Mientras la lista tenga más de un nodo


while((*lista)->siguiente != *lista) {
// Borrar el nodo siguiente al apuntado por lista
nodo = (*lista)->siguiente;
(*lista)->siguiente = nodo->siguiente;
free(nodo);
}
// Y borrar el último nodo
free(*lista);
*lista = NULL;
}

void MostrarLista(Lista lista) {


pNodo nodo = lista;

do {
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
} while(nodo != lista);
printf("\n");
}

#include<string.h>

#include<iostream.h>

#include<stdlib.h>

#include<conio.h>

struct empleado{

int ident;
char ap[20], nom[20],cargo[20];

int sueldo;

struct empleado *avanc;

};

empleado* insertar_nodo_inicial(void);

void insertar_nodos_circular(empleado *&,int c);

int progenc(empleado *);

void empleadosmayora(empleado *);

void sumanomina(empleado *);

char opciones(empleado *);

void ordenar(empleado*);

void imprime_lista_circ(empleado*);

void eliminar_nodo_circ(empleado *&cab,int i);

char opciones(empleado * cab)

char a;

cout<<"n";

cout<<"1.crear nodo inicial"<<"n";

cout<<"2.Insertar nuevo dato"<<"n";

cout<<"3.Programadores en c++"<<"n";

cout<<"4.Sueldo mayor a $2'500.000"<<"n";

cout<<"5.Motrar suma de sueldos empleados"<<"n";

cout<<"6.imprimir lista"<<"n";

cout<<"7.borrar nodo"<<"n";

cout<<"8.salir"<<"n";

cout<<"INGRESE OPCION: ";


cin>>a;

return a;

void main()

int i,c;

char opcion;

empleado *cab=NULL;

while(opcion!='8')

opcion=opciones(cab);

switch(opcion)

case '1':cab=insertar_nodo_inicial();

break;

case '2':cout<<"inserte identificacion: ";

cin>>c;

insertar_nodos_circular(*&cab,c);

break;

case '3':cout<<"en la empresa hay "<<progenc(cab)<<" programador(es) de c++


";

break;

case '4':empleadosmayora(cab);

break;

case '5':sumanomina(cab);

break;

case '6':imprime_lista_circ(cab);
break;

case '7':cout<<"inserte identificacion: ";

cin>>i;

eliminar_nodo_circ(*&cab, i);

break;

case '8':exit(0);

break;

default:cout<<"fuera de parametro";

//crearnodo

empleado* insertar_nodo_inicial()

empleado *crear;

crear=new empleado;

cout<<"IDENTIFICACION: ";

cin>>crear->ident;

cout<<"APELLIDO: ";

cin>>crear->ap;

cout<<"NOMBRE: ";

cin>>crear->nom;

cout<<"CARGO: ";

cin>>crear->cargo;;

cout<<"SUELDO: ";

cin>>crear->sueldo;
crear->avanc=crear;

return crear;

//insertar nodo

void insertar_nodos_circular(empleado *&cab,int c)

empleado *aux;

empleado *r;

if(cab!=NULL)

r=cab;

aux=new empleado;

while(r->ident!=c && r->avanc!=cab)

r=r->avanc;

if(r==cab)

cout<<"IDENTIFICACION: ";

cin>>aux->ident;

cout<<"APELLIDO: ";

cin>>aux->ap;

cout<<"NOMBRE: ";

cin>>aux->nom;

cout<<"CARGO: ";

cin>>aux->cargo;

cout<<"SUELDO: ";

cin>>aux->sueldo;

aux->avanc=r->avanc;
r->avanc=aux;

r=aux;

else

aux->avanc=r->avanc;

r->avanc=aux;

cout<<"IDENTIFICACION: ";

cin>>aux->ident;

cout<<"APELLIDO: ";

cin>>aux->ap;

cout<<"NOMBRE: ";

cin>>aux->nom;

cout<<"CARGO: ";

cin>>aux->cargo;

cout<<"SUELDO: ";

cin>>aux->sueldo;

else

cout<<"no hay nodo inicial de lista por favor digite 1";

//prog en c++

int progenc(empleado*cab)

empleado *q;
int cant=0;

q=cab;

if(cab)

if(strcmp(q->cargo,"programadores_en_c++")==0)

cout<<"n";

cant=cant+1;

while(q->avanc!=cab)

if(strcmp(q->cargo,"programadores_en_c++")==0)

cout<<"n";

cant=cant+1;

q=q->avanc;

else

cout<<"no existe lista";

return cant;

getch();

//SUELDO

void empleadosmayora(empleado *cab)

empleado *p;

p=cab;

if(cab)

{
if(cab->sueldo>2500000)

cout<<"IDENTIFICACION: "<<cab->ident;

cout<<"n";

cout<<"APELLIDO: "<<cab->ap;

cout<<"n";

cout<<"NOMBRE: "<<cab->nom;

cout<<"n";

cout<<"CARGO: "<<cab->cargo;

cout<<"n";

cout<<"SUELDO: "<<cab->sueldo;

cout<<"n";

p=cab->avanc;

while(p!=cab){

if(p->sueldo>2500000 && p!=cab)

cout<<"n";

cout<<"IDENTIFICACION: "<<p->ident;

cout<<"n";

cout<<"APELLIDO: "<<p->ap;

cout<<"n";

cout<<"NOMBRE: "<<p->nom;

cout<<"n";

cout<<"CARGO: "<<p->cargo;

cout<<"n";

cout<<"SUELDO: "<<p->sueldo;
cout<<"n";

p=p->avanc;}

else

cout<<"no existe lista";

getch();

//SUMANOMINA

void sumanomina(empleado *cab)

empleado *q;

int sumnomina=0;

q=cab->avanc;

if(cab)

sumnomina=cab->sueldo+sumnomina;

while(q!=cab)

sumnomina=cab->sueldo+sumnomina;

q=q->avanc;

cout<<"El total de la nomina es "<<sumnomina;

getch();

}
void imprime_lista_circ(empleado*cab)

empleado *q;

if(cab==NULL)

cout<<"no hay lista";

else

if(cab->avanc==cab)

cout<<"n";

cout<<"n";

cout<<"cedula:"<<cab->ident;

cout<<"n";

cout<<"apellido:"<<cab->ap;

cout<<"n";

cout<<"nombre:"<<cab->nom;

cout<<"n";

cout<<"cargo:"<<cab->cargo;

cout<<"n";

cout<<"sueldo:"<<cab->sueldo;

cout<<"n";

cout<<"n";

else

q=cab;

cout<<"n";

cout<<"n";
cout<<"cedula:"<<cab->ident;

cout<<"n";

cout<<"apellido:"<<cab->ap;

cout<<"n";

cout<<"nombre:"<<cab->nom;

cout<<"n";

cout<<"cargo:"<<cab->cargo;

cout<<"n";

cout<<"sueldo:"<<cab->sueldo;

cout<<"n";

cout<<"n";

q=cab->avanc;

do{

cout<<"cedula:"<<q->ident;

cout<<"n";

cout<<"apellido:"<<q->ap;

cout<<"n";

cout<<"nombre:"<<q->nom;

cout<<"n";

cout<<"cargo:"<<q->cargo;

cout<<"n";

cout<<"sueldo:"<<q->sueldo;

cout<<"n";

cout<<"n";

q=q->avanc;

while(q!=cab);

}
getch();

//ELIMINAR NODO

void eliminar_nodo_circ(empleado *&cab, int i)

empleado *q,*r;

q=r=cab;

if(cab==NULL)

cout<<"no hay cabeza";

else

if(cab->avanc==cab && cab->ident==i)

delete(q);

else

while((q->ident!=i) && (q->avanc!=cab))

q=q->avanc;

if(cab->avanc==q)

cab->avanc=q->avanc;

delete(q);

else
{

while(r->avanc!=q)

r=r->avanc;

r->avanc=q->avanc;

delete(q);

#include<stdio.h>
#include<stdlib.h>

struct nodo {
int info;
struct nodo *sig;
struct nodo *ant;
};

struct nodo *raiz=NULL;

void liberar()
{
if (raiz != NULL) {
struct nodo *reco = raiz->sig;
struct nodo *bor;
while (reco != raiz)
{
bor = reco;
reco = reco->sig;
free(bor);
}
free(raiz);
}
}

int vacia()
{
if (raiz == NULL)
return 1;
else
return 0;
}

void insertarPrimero(int x)
{
struct nodo *nuevo;
nuevo=malloc(sizeof(struct nodo));
nuevo->info = x;
if (raiz == NULL)
{
nuevo->sig = nuevo;
nuevo->ant = nuevo;
raiz = nuevo;
}
else
{
struct nodo *ultimo = raiz->ant;
nuevo->sig = raiz;
nuevo->ant = ultimo;
raiz->ant = nuevo;
ultimo->sig = nuevo;
raiz = nuevo;
}
}

void insertarUltimo(int x)
{
struct nodo *nuevo;
nuevo=malloc(sizeof(struct nodo));
nuevo->info = x;
if (raiz == NULL)
{
nuevo->sig = nuevo;
nuevo->ant = nuevo;
raiz = nuevo;
}
else
{
struct nodo *ultimo = raiz->ant;
nuevo->sig = raiz;
nuevo->ant = ultimo;
raiz->ant = nuevo;
ultimo->sig = nuevo;
}
}

void imprimir()
{
if (!vacia()) {
struct nodo *reco = raiz;
do {
printf("%i ",reco->info);
reco = reco->sig;
} while (reco != raiz);
printf("\n");
}
}

int cantidad()
{
int cant = 0;
if (!vacia())
{
struct nodo *reco = raiz;
do {
cant++;
reco = reco->sig;
} while (reco != raiz);
}
return cant;
}

void borrar(int pos)


{
if (pos <= cantidad())
{
if (pos == 1)
{
if (cantidad() == 1)
{
free(raiz);
raiz = NULL;
}
else
{
struct nodo *bor = raiz;
struct nodo *ultimo = raiz->ant;
raiz = raiz->sig;
ultimo->sig = raiz;
raiz->ant = ultimo;
free(bor);
}
}
else {
struct nodo *reco = raiz;
int f;
for (f = 1; f <= pos - 1; f++)
reco = reco->sig;
struct nodo *bor = reco;
struct nodo *anterior = reco->ant;
reco = reco->sig;
anterior->sig = reco;
reco->ant = anterior;
free(bor);
}
}
}

int main()
{
insertarPrimero(100);
insertarPrimero(45);
insertarPrimero(12);
insertarPrimero(4);
printf("Luego de insertar 4 nodos al
principio\n");
imprimir();
insertarUltimo(250);
insertarUltimo(7);
printf("Luego de insertar 2 nodos al
final\n");
imprimir();
printf("Cantidad de nodos:%i\n", cantidad());
printf("Luego de borrar el de la primer
posicion:\n");
borrar(1);
imprimir();
printf("Luego de borrar el de la cuarta
posicion:\n");
borrar(4);
imprimir();
liberar();
getch();
return 0;
}

Potrebbero piacerti anche