Me dejaron que a base de un código lasta.c el cual es el que se encuentra mas abajo, hacer el ordenamiento de burbuja, selección, shell, quick short, búsqueda lineal y búsqueda binaria. No se puede modificar el código porque según así debe ser el ejercicio, solo agregarle lo que me piden. Porfavor ayúdenme.
Código PHP:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct Nodo_{
char* dato;
struct Nodo_* ant;
struct Nodo_* sig;
};
typedef struct Nodo_ Nodo;
Nodo* creaNodo(char* d){
Nodo *nuevo;
nuevo= (Nodo*)malloc(sizeof(Nodo));
nuevo->dato=(char*)malloc(strlen(d)*sizeof(char));
strcpy(nuevo->dato, d);
nuevo->sig= nuevo->ant= 0;
return nuevo;
}
int tamanio(Nodo* inicio){
int i;
Nodo* tmp;
for(i= 0, tmp= inicio; tmp; i++, tmp= tmp->sig);
return i;
}
Nodo* iesimo(Nodo* inicio, int i){
int j;
Nodo* tmp;
if(i < 0 || i >= tamanio(inicio))
return 0;
for(j=0, tmp= inicio; j < i; j++, tmp= tmp->sig);
return tmp;
}
Nodo* agregar(Nodo* inicio, char* d){
Nodo* ultimo;
if(!inicio)
return creaNodo(d);
ultimo= iesimo(inicio, tamanio(inicio) - 1);
ultimo->sig= creaNodo(d);
ultimo->sig->ant= ultimo;
return inicio;
}
Nodo* insertar(Nodo* inicio, char* d, int i){
Nodo* tmp;
Nodo *nuevo;
if((!inicio && i) || i >= tamanio(inicio))
return inicio;
if(!inicio || i == tamanio(inicio) - 1)
return agregar(inicio, d);
if(!i){
tmp= inicio->sig;
inicio->sig= creaNodo(d);
inicio->sig->sig= tmp;
tmp->ant= inicio->sig;
return inicio;
}
tmp= iesimo(inicio, i);
nuevo= creaNodo(d);
nuevo->sig= tmp->sig;
nuevo->sig->ant= nuevo;
nuevo->ant= tmp;
tmp->sig= nuevo;
return inicio;
}
Nodo* eliminar(Nodo* inicio, int i){
Nodo* tmp;
Nodo* act;
if(!inicio || i >= tamanio(inicio))
return inicio;
if(!i){
tmp= inicio->sig;
if(tmp)
tmp->ant= 0;
free(inicio);
return tmp;
}
tmp= iesimo(inicio, i - 1);
act= tmp->sig;
tmp->sig= act->sig;
if(tmp->sig)
tmp->sig->ant= tmp;
free(act);
return inicio;
}
void imprimir(Nodo* inicio, int i, int f){
Nodo* tmp;
int j;
tmp= iesimo(inicio, i);
for(j= i; tmp && j <= f; j++, tmp= tmp->sig)
printf("%s\n", tmp->dato);
}
int main(){
Nodo *inicio;
char cad[80];
int i;
inicio= 0;
for(i= 0; i < 3; i++){
printf("Inserta la cadena: ");
gets(cad);
inicio= agregar(inicio, cad);
imprimir(inicio, 0, i + 1);
}
printf("Ahora insertaremos una linea despues de la linea 0: ");
gets(cad);
inicio= insertar(inicio, cad, tamanio(inicio)-2);
printf("La lista es: \n");
imprimir(inicio, 0, tamanio(inicio));
printf("Ahora borraremos la linea 4\n");
inicio= eliminar(inicio, 4);
imprimir(inicio, 0, tamanio(inicio));
getch();
return 0;
}