sorting linked list

I have a problem with sorting the list alphabetically.
Have I correctly written a sorting function?
If not please tell me how to write it correctly.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
struct book {
    char name[100];
    char author[50];
    int pages;
    int price;
	int yt;
};

struct element {
    book x;
    element *next;
};

void add(book x, element **head){
    element * t = new element;
    t->x = x;
    t->next = *head;
    *head = t;
}

void addLast(book x, element ** head, element **tail) {
    element * t = new element;
    t->x = x;
    t->next = NULL;
    if (*head){
        (*tail)->next = t;
    } else {
        *head = t;
    }
    *tail = t;
}



void print(element *head) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}

void printN(element *head,int y) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
		if(t->x.yt<y)
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}

void printS(element *head,char *f) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
		if(!strcmp(t->x.name,f))
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}

 
void print(book b) {
    cout << b.name<< " | " << b.author << " | "
    << b.pages << " | " << b.price <<"|"<<b.yt<< endl;
}

void bS(element**head){
	bool change;
	element *t;
	do
		change=false;
		for(t=*head;t->next;t=t->next){
			if(strcmp(t->x.name,t->next->x.name)
			{
				strcpy(char temp,t->x.name);
				strcpy(t->x.name,t->next->x.name);
				strcpy(t->next->x.name,temp);
				change=true;
			}
		}
while(change);
}












int main() {

    element *head = NULL;
    element *tail = NULL;

    book b;
    strcpy(b.name, "C");
    strcpy(b.author, "D");
    b.pages = 100;
    b.price = 1500;
	b.yt=1980;
    addLast(b, &head, &tail);

    strcpy(b.name, "C");
    strcpy(b.author, "M");
    b.pages = 300;
    b.price = 2500;
	b.yt=1982;
    addLast(b, &head, &tail);

    strcpy(b.name, "K");
    strcpy(b.author, "H");
    b.pages = 120;
    b.price = 1000;
	b.yt=1975;
    addLast(b, &head, &tail);

    print(head);
	int y=1982;
	char f[]="D";
	
	printN(head,y);
	printS(head,f);
	bS(&head);
	print(head);
	
    
  
 
    return 0;
}
1
2
3
4
        printN(head,y);
	printS(head,f);
	bS(&head);
	print(head);


Then reading it's like poem.
Edgar Alan Poet detective writer.
When pass the exams, be sure to read the books by this author.
And now my head is not working.
Why sort of numbers going on, and there is no sort of words?

struct element {
int x;
element *next;
};

void add(int x, element **head){
element * t = new element;
t->x = x;
t->next = *head;
*head = t;
}

void addLast(int x, element ** head, element **tail) {
element * t = new element;
t->x = x;
t->next = NULL;
if (*head){
(*tail)->next = t;
} else {
*head = t;
}
*tail = t;
}

int remove(element **head) {
int result = (*head)->x;
element * t = *head;
*head = t->next;
delete t;
return result;
}


void print(element *head) {
cout << "------------------------" << endl;
element * t = head;
while (t != NULL) {
if(t->x)
cout << t->x << " ";
t = t->next;
}
cout << endl << "------------------------" << endl;
}


void printN(element *head,int y) {
cout << "------------------------" << endl;
element * t = head;
while (t != NULL) {
if(t->x<y)
cout << t->x << " ";
t = t->next;
}
cout << endl << "------------------------" << endl;
}

void bub(element ** Head) {
bool change;
element *t;

do {
change = false;
for (t = *Head; t->next; t = t->next)
{
if (t->x> t->next->x)
{
int temp = t->x;
t->x = t->next->x;
t->next->x = temp;
change = true;
}
}
} while (change);
}












int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

element *head = NULL;
element *tail = NULL;

addLast(2, &head, &tail);
addLast(1, &head, &tail);
addLast(3, &head, &tail);
addLast(7, &head, &tail);
addLast(8, &head, &tail);

print(head);
int y=5;
printN(head,y);

bub(&head);
cout << "\nAfter sort :\n";
print(head);




return 0;
}
Topic archived. No new replies allowed.