Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 2_Лебедев.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
40 Кб
Скачать
☆

9.5. Описание функции func_sort

Назначение

Используется для сортировки элементов списка по алфавиту

Прототип

NT* func_sort(NT*)

,где параметр NT* - указатель на начало списка. NT* - .тип возвращаемого значения.

Пример вызова

spisok=fumc_sort(spisok),

где spisok-указатель на начало списка.

Описание переменных

Описание локальных переменных приведено в таблице 11.

Таблица 11. Описание локальных переменных функции obrabotka

Имя переменной

Тип переменной

Назначение

a,b,c,e,tmp

NT*

Вспомогательные переменные

Текст исходной программы на языке C/C++.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

typedef struct swimmers

{char name[20]; //Имя пловца

char surname[20]; //Фамилия

Int dist; //Дистанция

char country[20]; //Страна

struct swimmers *next;

}NT;

NT* f_vvod(NT*); //Ввод списка

void vivod(NT*); //Вывод списка

NT* func_dobavka_nach(NT*); //Добавление элемента в начало списка

NT* func_dobavka_kon(NT*); //Добавление элемента в конец списка

NT* func_sort(NT*); //Сортировка списка по алфавиту

void main(void)

{

NT *spisok=NULL,*popitka=NULL;

int c,fl1,fl2=0,fl3,fl4;

char y;

do

{

system("cls");

puts("-----------Menu--------\n");

puts("1.Zapolnenie spiska \n");

puts("2.Vivod spiska \n");

puts("3.Dobavlenie elementa v spisok\n");

//puts("3.Obrabotka spiska \n");

puts("4.dobavka v konets\n");

puts("5.Sortirovka\n");

puts("6.Zaverchenie programmi\n");

puts("-----------------------");

puts("Viberite punkt\n");

scanf("%d",&c);

switch(c)

{

case 1:

do

{

spisok=f_vvod(popitka);

popitka=spisok;

puts("prodolgit?\n");

fflush (stdin);

scanf("%c",&y);

}

while(y!='n');

fl1=1;

break;

case 2:

if (fl1==1)

{

vivod(spisok);

fl2=1;

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 3:

if (fl1==1)

{

if (fl2==1)

{

spisok=func_dobavka_nach(spisok);

fl3=1;

}

else puts("Oshibka! Vi ne vipolnili punkt 2");

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 4:

if (fl1==1)

{

if (fl2==1)

{

spisok=func_dobavka_kon(spisok);

fl4=1;

}

else puts("Oshibka! Vi ne vipolnili punkt 2");

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 5:

spisok=func_sort(spisok);

break;

}

}

while(c!=6);

}

NT* f_vvod(NT* spisok)

{

NT *r;

char y,d[20];

int i;

puts("Vvedite imya plovca\n");

scanf("%s",d);

r=(NT*)malloc(sizeof(NT));

strcpy(r->name,d);

puts("Vvedite familiy plovca\n");

scanf("%s",d);

strcpy(r->surname,d);

puts("Vvedite distanciu\n");

scanf("%d",&i);

r->dist=i;

puts("Vvedite strany\n");

scanf("%s",d);

strcpy(r->country,d);

r->next=spisok;

spisok=r;

return spisok;

}

void vivod(NT* lst)

{

NT *r;

puts("vivod spisochka\n");

getch();

r=lst;

puts ("|-----------------------------------------------|");

printf("|Name |Surname |Country |Distance|\n");

puts("|-----------------------------------------------|");

while(r!=NULL)

{

printf("|%-14s",r->name);

printf("|%-12s",r->surname);

printf("|%-10s",r->country);

printf("|%-8d|",r->dist);

printf("\n");

r=r->next;

}

puts("|-----------------------------------------------|");

getch();

}

NT* func_dobavka_nach(NT* old)

{

NT *q;

q=(NT*)malloc(sizeof(NT));

q=f_vvod(q);

q->next=old;

old=q;

return old;

}

NT* func_dobavka_kon(NT* old)

{

NT *m,*k;

m=(NT*)malloc(sizeof(NT));

m=f_vvod(m);

k=old;

while(old->next!=NULL)

old=old->next;

old->next=m;

m->next=NULL;

return k;

}

NT* func_sort(NT* spisok)

{

NT *a = NULL;

NT *b = NULL;

NT*c = NULL;

NT *e = NULL;

NT *tmp = NULL;

while(e!= spisok->next)

{

c = a = spisok;

b = a->next;

while(a != e)

{

if(strcmp(a->name, b->name)<0)

{

if(a == spisok)

{

tmp = b -> next;

b->next = a;

a->next = tmp;

spisok = b;

c = b;

puts("Sluchai 1");

}

else

{

tmp = b->next;

b->next = a;

a->next = tmp;

c->next = b;

c = b;

puts("Sluchai 2");

}

}

else

{

c = a;

a = a->next;

puts("sluchai 3");

}

b = a->next;

getch();

if(b == e)

e = a;

}

}

return spisok;

}