#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct list
{
void *val;
list *prev;
list *next;
};
void showCHAR(list *q) //функция вывода строк
{
for (; q != NULL; q = q->next)
{
cout << (char*)q->val << " ";
}
cout << " ";
}
void compareINT(list *j, list *k, int &flag) //Функция сравнения чисел
{
if (j->val<k->val)
flag = 1;
else
flag = 0;
}
void compareCHAR(list *j, list *k, int &flag) //Функция сравнения строк
{
int h;
char* c = (char*)j->val;
char* x = (char*)k->val;
h = strcmp(c, x);
if (h<0)
flag = 1;
else
flag = 0;
}
void sort(list *q, void(*pp)(list*, list*, int &)) //Сортировка выбором, для чисел и строк
{
list* i = q;
list* k = q;
list* j = q;
int n = 0, flag = 0;
for (; i->next != NULL; i = i->next)
{
for (j = i->next, k = i; j != NULL; j = j->next)
{
pp(j, k, flag);
if (flag == 1)
{
k = j;
n = 1;
}
}
if (n == 1)
swap(i->val, k->val);
flag = 0;
}
}
list *writeINT(list *q, int m) //Функция ввода чисел
{
list *t = new list;;
list *r = new list;
t->val = (int*)m;
t->next = NULL;
if (q == NULL)
q = t;
else
{
for (r = q; r->next != NULL; r = r->next);
r->next = t;
}
return q;
}
list *writeCHAR(list *q, char m[]) //Функция ввода строк
{
list *p = new list;
list *r = new list;
p->val = (void*)m;
p->next = NULL;
if (q == NULL) {
q = p;
}
else {
for (r = q; r->next != NULL; r = r->next);
r->next = p;
}
return q;
}
void main()
{
setlocale(LC_ALL, "Russian");
list *q = NULL;
char m[100][100];
int l = -1, u = 0, menu;
{
cout << "1)По числам" << endl;
cout << "2)По строкам" << endl;
cin >> menu;
switch (menu)
{
case 1: {
for (;;) {
cin >> u;
if (u == -1)
break;
else {
q = writeINT(q, u);
}
}
sort(q, compareINT);
for (; q->next != NULL; q = q->next) {
cout << (int)q->val << " ";
}
cout << (int)q->val << " ";
case 2: {
do
{
l++;
cin >> m[l];
} while (m[l][0] != '0');
while (l>0)
{
l--;
q = writeCHAR(q, m[l]);
}
sort(q, compareCHAR);
showCHAR(q);
}
}
}
}
system("pause");
}