Здравтвуйте! Как поменять два соседних элемента в списке? Вот код:
| Код | #include <stdio.h> #include <stdlib.h> #include <string.h> struct A {char name[80]; char title[80]; double r; int age; struct A *prev; //Previous struct A *next;}; //Next void main() { A* head = 0; A* curr = 0; A* prev; A* vyv; A* last; char name[80]; char title[80]; int age; double r;
int i,n; i=0;n=0;
FILE *f, *g; f=fopen("D:\\qqq.txt","rt"); //исходный файл g=fopen("D:\\sort1.txt","wt");//файл с отсортированным списком if(f==NULL) { printf("File cannot be open"); } else { // записываем "голову" списка if(!feof(f)) { fscanf(f, "%[^\"]s", name); fscanf(f, "\"%[^\"]s", title); fscanf(f, "%3*c%lf", &r); fscanf(f, "%*s%d", &age); //printf("%s %s %lf %d", name, title, r, age); head = (A*) malloc(sizeof(struct A)); strcpy(head->name,name); strcpy(head->title,title); head->r=r; head->age=age; head->prev = NULL; head->next = NULL; prev = head; i=1; } // добавляем новые звенья while(!feof(f)) { fscanf(f, "%[^\"]s", name); fscanf(f, "\"%[^\"]s", title); fscanf(f, "%3*c%lf", &r); fscanf(f, "%*s%d", &age); //printf("%s %s %lf %d", name, title, r, age); curr = (A*) malloc(sizeof(struct A)); strcpy(curr->name,name); strcpy(curr->title,title); curr->r=r; curr->age=age; curr->prev = prev; curr->next = NULL; prev->next = curr; prev = curr; i++; }
//А здесь должна была быть сортировка
vyv=head; while(vyv) { printf("Autor: %s; Nazvanie: %s; Cennost': %5.2lf Vozrast: %d\n------------------\n", vyv->name, vyv->title,vyv->r,vyv->age); //fprintf(g, "%s - %s %5.2lf %d", vyv->name, vyv->title,vyv->r,vyv->age); vyv=vyv->next; } fclose(f); fclose(g); }
getchar(); }
|
Если, например, будет нужно(в процессе сортировки) поменять местами curr и curr->next? |