Добрый день. У меня есть задание - Поменять местами первый и последний элементы в очереди.
Вроде код написала правильный, но судя по тому, что не работает, то я ошибаюсь.
C++ |
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
| #include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <clocale>
typedef struct sp //Создаем динамическую структуру данных с указателем *next
{
char inf [100] ; //Очередь
struct sp *next; //Указатель на следующий элемент
} sp;
sp *g,*head,*teil; //Голова и хвост очереди
void program()
{
int kol=1; //счетчик(номера элементов очереди)
char key; //клавиша события
//Вводим начальный элемент очереди
printf("Введите элементы стрруктуры: \n");
head=(sp*) malloc(sizeof(sp)); //создает начальный элемент
g=head; //g будет указывать на голову очереди
printf("Введите %i элемент: ",kol);
scanf("%s",&g->inf); //считываем элемент g который помещаеться в очередь инф
g->next=0; //Следующему элементу мы присваиваем 0
//teil->next=0; //Следующему элементу за хвостом мы так же присваиваем 0
teil=head; //Хвост очереди указывает на ее начало
//Ввод остальных эл-тов структуры
kol++;
printf("Введите %i элемент: ",kol);
g=(sp*) malloc(sizeof(sp));
scanf("%s",&g->inf);
g->next=0;
teil->next=g;
teil=teil->next;
do {
kol++;
printf("Введите %i элемент: ",kol);
g=(sp*) malloc(sizeof(sp));
scanf("%s",&g->inf);
g->next=0;
teil->next=g;
teil=teil->next;
printf("Для прекращения ввода нажмите ESC; Для продолжения любую клавишу\n");
key=getch();
} while (key!=27);
//Вывод всех введенных элементов
printf("Вы ввели такие элементы: \n");
g=head;
kol=0;
while (g!=0)
{
kol++;
printf("Эллемент %i=%s: \n",kol,g->inf);
g=g->next;
}
getch();
}
void zamena()
{
char *tmp; //временный массив символов
//Перезапись очереди
g=head;
while (g->next != NULL) //Пока следующий элемент не равен 0
{
if (g->next->next == NULL) //Если третий от головы элемент равен нулю то
{
strcpy(tmp,g->inf); //Копирует первый элемент в тмп
strcpy(g->inf,head->inf); //Копирует
strcpy(head->inf,tmp);
}
g=g->next; //Указывает на следующий элемент
}
//Вывод результата
g=head;
int kol=1;
printf("\nРезультат: ");
while (g!=NULL)
{
printf("\n%i-й элемент равен:%s",kol,g->inf);
kol++;
g=g->next;
}
getch();
}
void cleen() //Очищаем всю очередь
{
g=head;
while (g != NULL)
{
free(g);
g=g->next;
}
}
void main()
{
setlocale(LC_ALL, "Russian");
program();
zamena();
cleen();
} |
|
В коде, где собственно идет перезапись очереди я и намудрила. Буду рада, если кто-то мне поможет.
Добавлено через 59 минут
Где же вы, добрые люди?
Добавлено через 7 часов 16 минут
Системный ап