#include<stdio.h>
#include<stdlib.h>
struct nodo{
char data;
struct nodo *nextPtr;
};
typedef struct nodo NODO;
typedef NODO *NODOPTR;
void insertNodo(NODOPTR *, char);
char deleteNodo(NODOPTR *, char);
int listLength(NODOPTR);
void ordenarAscendente(NODOPTR *, NODOPTR *);
void printLista(NODOPTR);
main()
{
NODOPTR startPtr = NULL, startPtr2 = NULL;
char value;
int choice;
printf("Ingrese una opcion: ");
while (choice != 4){
switch (choice){
case 1:
printf("Ingrese una letra: "); insertNodo(&startPtr, value);
printLista(startPtr);
break;
case 2:
printf("Ingrese una letra para borrar: "); deleteNodo(&startPtr, value);
printLista(startPtr);
break;
case 3:
if(listLength(startPtr) == NULL)
printf("La lista no contiene elementos\n"); else
printf("La lista contiene %d elementos\n", listLength
(startPtr
)); break;
default:
}
printf("Ingrese una opcion: "); }
ordenarAscendente(&startPtr, &startPtr2);
printLista(startPtr2);
return 0;
}
void insertNodo(NODOPTR *sPtr, char val)
{
NODOPTR newPtr, previousPtr, currentPtr;
newPtr
= (NODO
*)malloc(sizeof(NODO
));
if (newPtr != NULL){
newPtr -> data = val;
newPtr -> nextPtr = NULL;
previousPtr = NULL;
currentPtr = *sPtr;
while (currentPtr != NULL){
previousPtr = currentPtr;
currentPtr = currentPtr -> nextPtr;
}
if (previousPtr == NULL){
newPtr -> nextPtr = *sPtr;
*sPtr = newPtr;
}
else{
previousPtr -> nextPtr = newPtr;
newPtr -> nextPtr = currentPtr;
}
}
else
printf("%s not inserted. Insuficient space", val
); }
char deleteNodo(NODOPTR *sPtr, char val)
{
NODOPTR previousPtr, currentPtr, tempPtr;
if (val == (*sPtr) -> data){
tempPtr = *sPtr;
*sPtr = (*sPtr) -> nextPtr;
return val;
}
else{
previousPtr = *sPtr;
currentPtr = (*sPtr) -> nextPtr;
while(currentPtr != NULL && currentPtr -> data != val){
previousPtr = currentPtr;
currentPtr = currentPtr -> nextPtr;
}
if(currentPtr != NULL){
tempPtr = currentPtr;
previousPtr -> nextPtr = currentPtr -> nextPtr;
return val;
}
}
return '\0';
}
int listLength(NODOPTR currentPtr)
{
int cont = 0;
if (currentPtr == NULL)
return NULL;
else{
while (currentPtr != NULL){
cont++;
currentPtr = currentPtr -> nextPtr;
}
}
return cont;
}
void ordenarAscendente(NODOPTR *sPtr, NODOPTR *sPtr2)
{
NODOPTR auxPtr, previousPtr, currentPtr, tempPtr;
//auxPtr = *sPtr;
if (*sPtr == NULL)
printf("No hay elementos en la lista\n"); else{
while (*sPtr != NULL){
tempPtr = *sPtr;
previousPtr = NULL;
currentPtr = *sPtr2;
while (currentPtr != NULL && tempPtr -> data > currentPtr -> data){
previousPtr = currentPtr;
currentPtr = currentPtr -> nextPtr;
}
if (previousPtr == NULL){
tempPtr -> nextPtr = *sPtr2;
*sPtr2 = tempPtr;
}
else{
previousPtr -> nextPtr = tempPtr;
tempPtr -> nextPtr = currentPtr;
}
*sPtr = (*sPtr) -> nextPtr;
}
}
}
void printLista(NODOPTR currentPtr)
{
if (currentPtr == NULL)
printf("La lista esta vacia"); else{
while (currentPtr != NULL){
printf("|%c|->", currentPtr
-> data
); currentPtr = currentPtr -> nextPtr;
}
}
}