Tareas a pequeña escala
Te daré una lista vinculada que escribí, con todas las funciones. Puedes cambiarlo tú mismo.
# include & ltiostream.h & gt
# include & ltstring.h & gt
# include & ltstdlib.h & gt
Lista de cursos{
Público:
Chuanhuo;
Estado de la cadena;
valor int;
int num
int pos
Lista * siguiente
};
Líder de clase{
Público:
Lista * siguiente
int ListLength
};
cadena CUR_FILE("Sin título");
bool print list(Cabeza * p);
bool BuildTXT(Cabeza*, cadena);
void PrintTXT(nombre de archivo de cadena){
opción de cadena= " si existe";
opción =opción+nombre de archivo+"tipo"+nombre de archivo;
Sistema (opción);
} //printxt
bool InitList(Head * & amp;p){
Si (! (p = nuevo encabezado)) devuelve falso
En caso contrario {
p- >; longitud de la lista = 0;
p->; siguiente = NULL
Devuelve verdadero
}
}//InitList
Booleano (head * & ampp) {
lista * LP = p-& gt
int I = 0;
mientras(lp){
LP-& gt; pos = I;
LP = LP-& gt; siguiente;
i++;
}
Devuelve verdadero
}//Número
bool Crear lista (encabezado * y ampp, lista * y apéndice){
Lista* lp, temp
cout & lt<"Por favor ingrese:\nNombre\tEstado\tValor\tNúmero\n" ;
Si (!(p->; next=lp=new List)) devuelve false
CIN>>LP->Producto>>LP-> ;estado>& gtLP->valor>& gtLP->num
mientras(LP-> número&&LP->valor){
if (! (LP-& gt; siguiente=nueva lista)) devuelve falso
else p-& gt;longitud de la lista++;
temp = lp
LP = LP ->Siguiente;
CIN>>LP->Artículo>>LP->Estado>>LP->Valor>>LP->num
}
Eliminar LP;
end = temp
temp->; next = NULL
si (!Number(p)) devuelve falso
devuelve verdadero
}//CreateList
Inserción booleana (head * & ampp, int position) {
Lista* lp, end
>Cabeza * temperatura;
if(posición <0 | |posición>p->ListLength) devuelve falso
InitList(temp);
if(!posición ){
CreateList(temp, end);
p->;longitud de la lista += temporal-& gt;longitud de la lista;
end->siguiente = p->siguiente;
p->siguiente = temp->siguiente;
}
En caso contrario {
LP = p-& gt; siguiente;
mientras (posición) {
LP = LP-& gt;
}
CreateList(temp, end);
p->;Longitud de la lista += temporal ->Longitud de la lista;
end->;siguiente = LP->Siguiente;
LP->siguiente = temp->Siguiente
}
Eliminar temp
Si (!Number(p)) devuelve falso
if(CUR _ FILE)CUR _ FILE+ = ' * ';
Devuelve verdadero
}//Insertar
Booleano eliminar(head * & ampp, int posición, int cantidad) {
List* lp, cut;
int estado = posición;
if(posición+cantidad>p->;longitud de la lista||posición<0||cantidad& lt0) devuelve falso
p->; p>
for(LP = p-& gt; siguiente; posición; corte=lp, posición -, LP = LP->Siguiente);
for(LP&&Cantidad-, LP = LP->Siguiente);
if (estado )cortar->siguiente = lp
si no p->siguiente = lp
si (! Número(p)) devuelve falso
if (CUR _ FILE[strlen(CUR _ FILE)-1]!= ' * ' strcat(CUR _ FILE, " * ");
Devolver verdadero
}//Eliminar
modificación booleana (head *& ampp, int position) {
lista * LP = p-& gt; siguiente;
if(posición & lt 0 | p>Posición-;
}
si (4! =scanf("%s %s %d%d ",LP->Artículo,LP->Estado.
LP->valor&LP->num)) return false
if(CUR_FILE[strlen(CUR_FILE)-1]!= ' * ' strcat(CUR_FILE, " * ");
Devuelve verdadero
}//Modificado por SJ//Power
/* int con _ op(const char * condition, int & ampi){
Cambiar (condición [i]){
Caso "=":
I+= 2;
Devolver 1;
Caso ">":
if(condición[i+1]!='='){
i++;
return 2;
}
En caso contrario{
I+= 2;
Devuelve 3;
}
Caso ' & lt':
if(condición[i+1]!='='){
i++;
p>Retorno 4;
}
En caso contrario {
I+= 2;
Devuelve 5;
}
Caso '!':
I+= 2;
Devuelve 6;
Valor predeterminado:
p>Devuelve 0; p>
}
}//Se usa para buscar */
bool add node(Head * & amp; p, list Node){
Lista * lp
if (!(lp=(List*)malloc(sizeof(List)))) devuelve falso
else p- >longitud de la lista++;
*(LP)=nodo;
LP->siguiente = p->Siguiente;
p ->; Devuelve verdadero
}//Agregar nodo de búsqueda
bool Find(Head* p, int op){
char com[30];
Indentador * temperatura;
Lista * lp
int t;
InitList( temp);
Si (!p ) devuelve falso
Cambiar (op){
Caso 1:
printf(" name input >>);
scanf ("%s ", com);
for(LP = p-& gt; siguiente; LP; LP = LP-& gt; siguiente)
if (! strcmp(com,LP->goods)) addnode(temp,*LP);
Break;
Caso 2:
printf(" entrada de estado >>);
scanf("%s ", com);
for(LP = p-& gt; siguiente; LP; LP = LP-& > siguiente > Caso 3:
printf(" valor de entrada >>);
scanf("%d ",&t);
for(LP = p- >LP; LP = LP->Siguiente)
if(t = = LP->valor) addnode(temp, *LP
);
Pausa;
Caso 4:
printf(" cantidad de entrada & gt;>);
scanf("% d ", &t);
for(LP = p-> siguiente; LP; LP = LP-> siguiente)
if(t = = LP -> num ) addnode(temp, *LP);
Break;
Predeterminado: devolver falso
} //Desarrollado por SJ
Si (!Number(p)) devuelve false
printf("Búsqueda completa...Acción (1.PrintResults2.BuildResultTXT)>>);
scanf("%d ", &t);
switch(t){
Caso 1:
printf(" \ n resultado:\ n " );
print list(temp);
getchar();
printf("Presione Enter para continuar...");
And(!getchar( ));
Pausa;
Caso 2:
if(CUR _ FILE[strlen(CUR _ FILE)- 1]= = ' * ') devuelve falso
strcpy(com, CUR_FILE);
com[strlen(com)-4]= 0;
strcat(com, "_result.txt ");
BuildTXT(temp, com); break;
Valor predeterminado: devolver falso
}
Gratis (temporal)
Devuelve verdadero
}//Buscar
disposición booleana (head * & ampp, int op) {
int i, j, k, n = p-& gt; longitud de la lista;
Lista* temp, LP
Lista t;
p>
Si (!(temp =(List *)malloc(sizeof(List)* n))) devuelve false
for(i=0, LP = p-> Siguiente ;LP;LP = LP-> ;Siguiente,i++){
temp[I]= * LP;
}
Interruptor (op) {
Caso 1 :
for(I = 0;i<n-1;i++){
k = I;
for(j = I+1; j & ltn ; j++)
if(strcmp(temp[j]). Mercancías, temperatura [k]. bienes)<0)k = j;
if (k!= I){ t = temp[k]= temp[I]; p>
}
Pausa;
Caso 2:
for(I = 0;i<n-1;i++){ p>
k = I;
for(j = I+1; j & ltn; j++)
if(strcmp(temp[j]).estado,temperatura [k] .
estado)<0)k = j;
if (k!= I){ t = temp[k]= temp[I]; p>
}//Desarrollado por SJ (Ureys)
Break;
Caso 3:
for(I = 0;i& ltn -1 ; i++){
k = I;
for(j = I+1; j & ltn; j++)
if(temp[j ]. valor<temperatura[k].valor)k = j;
if (k!= I){ t = temp[k]; temp[k] = temp[I]; }
}
Pausa;
Caso 4:
for(I = 0; i<n- 1; i++){ p>
k = I;
for(j = I+1; j & ltn; j++)
if(temp[j] .num & lttemperatura[k] num)k = j;
si (k!= I){ t = temp[k]; temp[k]= temp[I]; >
}
Pausa;
Valor predeterminado: devolver falso
}
para (i=0, LP = p -> siguiente; LP; LP = LP-> siguiente, i++){
strcpy(LP-> carga, temperatura[i] .producto);
strcpy( LP->estado,temperatura[i].estado);
LP->num=temp[i]. num
LP-& gt; valor=temp[i].
valor;
}
Gratis (temporal)
Devuelve verdadero
}//Disposición
Booleano; store(encabezado*&p, const char*nombre de archivo){
ARCHIVO *fp
lista *LP = p-> siguiente;
if (!( fp=fopen(nombre de archivo, "wb")) devuelve falso
strcpy(archivo actual, nombre de archivo);
if(CUR _ FILE[strlen(CUR _ FILE)-1 ]= = ' * ')CUR _ FILE[strlen(CUR _ FILE)-1]= NULL
mientras(lp){
fwrite(lp, sizeof (Lista) , 1, FP);
LP = LP-& gt;Siguiente;
}
Devuelve verdadero
}//Guardar
carga booleana(head*&p, const char*nombre de archivo){
ARCHIVO * fp
Lista * lp
Si (! (fp=fopen(nombre de archivo, " rb ")) devuelve falso
strcpy(archivo actual, nombre de archivo);
If (!(p- >;next = LP =( Lista *)malloc(sizeof(List))) devuelve false
Si (1!=fread(lp,sizeof(List),1,fp)) devuelve false
If ( 1!=fread(lp,sizeof(List),1,fp)) devuelve false
p>mientras(LP->; siguiente){
Si (!(LP- & gt; next=(Lista*)malloc(sizeof(List)))) devuelve false
If (1!= fread(LP-& gt; next, sizeof(List), 1, fp) ) devuelve falso
LP = LP-& gt; siguiente;
p>}
p->;longitud de lista = LP->pos+1 ;
Devuelve verdadero
}//Cargando
Lista de impresión booleana (Cabeza* p){
int I;
for(I = 36-strlen(CUR_FILE)/2;I;I -)printf(" ");
printf("%s\n ",CUR_FILE);
for(I = 0;i<80;i++)printf( " = ");
printf(" Nombre\t\t\tEstado\t\tValor\t\tCantidad\ n ") ;
for(I = 0 ;i<80;i++)printf("-");
for(Lista * LP = p->Siguiente;LP;LP = LP- >Siguiente){ p>
printf(" % d %-24s %-24s %-16d % d \ n ",LP->pos,LP->Artículo,LP->Estado, LP-> ;valor,LP->num);
}
for(I = 0;i<80;i++)printf(" = ");
printf("Longitud total=%d\n ", p-& gt; longitud de la lista);
Devuelve verdadero
}//Imprimir lista
bool BuildTXT(Head* p, char* txtname){
int I;
<p>//char txt nombre[50];
FILE * fp
/* if(CUR _ FILE[strlen(CUR _ FILE)-1]= = ' * ' ) devuelve falso
strcpy(txtname, CUR_FILE);
txt name[strlen(txt name)-3]= 0;
strcat(txtname , " txt"); */
Si (!(fp=fopen(txtname, "w")) devuelve falso
for(I = 36-strlen(txt name) /2 ; yo; yo - ) fprintf(fp, " ");
fprintf(fp, " %s\n ", nombre de texto); ;i++) fprintf(fp, "=");
fprintf(fp, "\n");
fprintf(fp, "Nombre\t\t \tEstado\t \tValor\t\tCantidad\n");
for(I = 0;i<80;i++) fprintf(fp, "-");
fprintf(fp, "\ n");
for(List * LP = p-> siguiente; LP; LP = LP-> siguiente){
fprintf(fp, " %d %- 24s%-24s%-16d%d\n ",LP->pos,LP->Artículo,LP->Estado,LP->valor,LP->num);
}
for(I = 0;i<80;i++) fprintf(fp, " = ");
p>
fprintf(fp, "\n") ;
fprintf(fp, "longitud total=%d\n", p->longitud de la lista);
fclose(FP);
printf ("¡¡¡Listo!!! Lista& gt& gt%s\n ", txt nombre);
getchar();
printf("Presiona Enter para continuar...");
Y (!getchar());
Devuelve verdadero
}// BuildTXT
comando int (Head * & ampp, Lista * & ampend) {
char com[50], op;
int posición, cantidad;
ARCHIVO * temp
scanf("%s ", com);
if (! Procter & Gamble.
&*com! = 'l' & amp& amp*com! = ' L ' & amp& amp*com! = 'n' & amp& amp*com! ='N '
& amp& amp*com! = 'e' & amp& amp*com! ='E'){
return-2;
}
Cambiar (*com){
Caso "b":
Caso "B":
if(CUR_FILE[strlen(CUR_FILE)-1]= = ' * ') devuelve falso
strcpy (com, CUR_FILE );
com[strlen(com)-3]= 0;
strcat(com, "txt");
if(!BuildTXT(p , com)) return 10;
return-4
}
Caso "n":
Caso 'N':
if(p){
return-3;
}
if(!InitList(p )) devuelve 1 <; /p>
Si (!CreateList(p, end)) devuelve 1;
return-4 //Nuevo (crear)
}
Caso "d":
Caso "D":
printf(" Eliminar & gt; (posición, cantidad)>>);
Si ( 2!=scanf("%d%d ", & posición & cantidad)) devuelve 2;
If (!Delete(p, posición, cantidad)) devuelve 2 ;
return-4; //Eliminar
}
Caso 'I':
Caso 'I':
printf(" Insertar & gt; (posición)>>);
Si (1!=scanf("%d ", & ampposition)) devuelve 3;
if (!Insert(p, posición)) return 3;
return-4; //Insertar
}
Caso "l":
p>Caso "L":
printf(" Cargar & gt; (nombre de archivo):\nLista de archivos:\n ");
Sistema("Si existe *. dirección lnl *. lnl/w");
printf("nombre del archivo de entrada>");
scanf("%s", com);
p>
strcat(com.
lnl");
Si (!InitList(p)) devuelve 4;
Si (!Load(p, com)) devuelve 4;
return -4; //Cargando
}
Caso 'm':
Caso 'M':
printf(" Modificar & gt; (posición)>>);
Si (1!=scanf("%d ", & ampposition)) devuelve 5;
Si (!Modify(p, posición) )) return 5;
return-4; //Modificar
}
Caso "h":
Caso "H" :
Si (!PrintTXT("help.shw ")) devuelve 6;
getchar();
printf("\nPresione Enter para continuar. ..");
getchar();
return-4; //Ayuda
}
Caso "f":
Caso ' F ':
printf(" Buscar & gt; (1.Nombre2.Estado3.Valor4.Monto)>>);
Si ( 1! =scanf("%d ", & amp posición)) devuelve 7
Si (!Find(p, posición)) devuelve 7
return-4;/ /Buscar
}
Caso:
Caso:{
printf(" Guardar & gt; (nombre de archivo)>>) ;
scanf("%s ",com);
strcat(com.lnl");
if (!Save(p,com)) Return 8;
return-4; //Guardar
}
Caso "a":
Caso "A":
printf(" Organizar & gt; (1.Nombre2.Estado3.Valor4.Cantidad)>>);
if (1!=scanf("%d ",& ampposición) ) devuelve 9;
Si (!Arrange(p, posición)) devuelve 9
return-4;
Caso "e":
Caso "E":
if(CUR _ FILE[strlen(CUR _ FILE)-1]= = ' * '){
printf("¡Advertencia! ! ! ¡Archivo no guardado! & gt& gt¿Estás seguro de que quieres salir? (sí/no)>);
getchar();
scanf("%c ", & ampop);
if(op==' Y'||op=='y ') devuelve -1;
En caso contrario, devuelve -4;
}
return-1;
Valor predeterminado: devuelve 0;
}//El comando legal devuelve -4
}//Comando
Error no válido (estado int){
Cambiar (estado){
Caso 4: Devolución; //Estado legal
caso -3:printf("Error: ¡¡¡La lista ya existe!!! Guardar , de lo contrario, se perderán los datos.\n>>);Return;
Caso 2: printf("Es ilegal hacer esto antes de 'nueva/cargar' una lista.\n>> );Return;
//-1 se utiliza para salir.
Caso 0: printf("Comando ilegal. Consulte la ayuda para obtener información.
\ n & gt>); Return;
Caso 1: printf ("Error al crear una nueva lista. Puede que no haya suficiente memoria. \ n & gt>); Return;
Caso 2: printf("Error de eliminación.\n>>); Retorno;
Caso 3: printf("Error de inserción.\n>>); Retorno;
Caso 4:
printf("Error al abrir este archivo. Verifique el nombre del archivo\ n & gt>);
printf("¡Presione Enter para volver a intentarlo!");
getchar();
And (!getchar());
Salir (0);
Caso 5: printf("Posición ilegal o una se produjo un error de entrada durante la modificación\ n & gt>); Retorno;
Caso 7: printf ("No se puede encontrar el elemento. \ n & gt>); Return;
Caso 8: printf ("No se puede guardar. Puede que no haya suficiente memoria. \ n & gt>) ; Return;
Caso 9: printf("No se pudo organizar la lista.\n & gt>); Return;
Caso 10: printf("No has guardado la lista /¡No se puede generar el archivo TXT!\ n & gt>);
Valor predeterminado: printf ("¡Error del sistema! Vuelva a abrir el programa); Salir (0); p>
}
}//Error
Apertura vacía(){
imprimir txt(" apertura . shw ");
printf(" \ n \ t\t\tPresione Enter para continuar");
And(!getchar());
System("cls");
}// Abrir
void main(){
int status;
Apertura();
print txt(" ayuda . shw " );
printf(" \ n ");
Lista * e = NULL
Encabezado * p = NULL
printf( ">>);
Y ((status=Command(p,e))!=-1){
if(status = =-2 | estado = = 4 | estado = = 1){
Error (estado);
Continuar;
}
Sistema("cls ");
Imprimir lista(p);
printf(" & gt;>);
Error (estado) ;
}
}//principal