0 / 0 / 0
Регистрация: 21.11.2016
Сообщений: 3
1

Очередь. Перед каждым элементом Х вставить Y, а после Z

30.05.2017, 22:13. Показов 493. Ответов 0
Метки нет (Все метки)

Есть задание, по динамическим структурам, код работает верно, но не срабатывает, если первым элементом в список вводится значение "x", помогите, пожалуйста исправить.
Задание: установка, которая формирует новый список из входящего таким образом: перед каждым элементом с значением Х вставляет элемент со значением Y, а после элемента X – элемент со значением Z.
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
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
145
146
147
148
149
150
151
152
153
154
155
#include "stdafx.h" 
#include "windows.h" 
#include "ctype.h" 
#include "conio.h" 
#include "string.h" 
#define NUM_MAXLEN 40 
 
typedef struct queue
{
    char value;
    struct queue *next;
} QUEUE;
 
QUEUE* input(char* x, char* y, char* z); 
void create(QUEUE *ptr, char c); 
void output(QUEUE *ptr); 
char charIn();
QUEUE* task(QUEUE* queue1, char x, char y, char z); 
 
int _tmain(int argc, _TCHAR* argv[])
{
    QUEUE *inputPtr, *newPtr;
    char x, y, z;
 
    system("color F0");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    inputPtr = input(&x, &y, &z);
    printf("\nВведённый список:");
    output(inputPtr);
    newPtr = task(inputPtr, x, y, z);
    printf("Новый список:");
    output(newPtr);
    system("pause");
 
    return 0;
}
 
char charIn()
{
    unsigned char c = '\0';
    char c1;
    bool inp = false;
 
    while (c != 13)
    {
        c = _getch();
        if (!inp)
        {
            printf("%c", c);
            c1 = c;
            inp = true;
        }
        else if (c == 8 && inp)
        {
            printf("\b");
            printf(" ");
            printf("\b");
            inp = false;
        }
    }
 
    return c1;
}
 
QUEUE* input(char* x, char* y, char* z)
{
    char c = '\0';
    float num;
    int i;
    QUEUE* ptr = new QUEUE;
    QUEUE* head = ptr;
 
    printf("Введите X: ");
    *x = charIn();
    printf("\n");
    printf("Введите Y: ");
    *y = charIn();
    printf("\n");
    printf("Введите Z: ");
    *z = charIn();
    printf("\n");
    for (i = 0; c != 13; i++)
    {
        printf("A[%d]: ", i + 1);
        c = charIn();
        if (c == 13)
        {
            delete ptr->next;
            ptr->next = NULL;
        }
        else
        {
            if (i != 0)
                ptr = ptr->next;
            create(ptr, c);
        }
        printf("\n");
    }
    printf("\n");
 
    return head;
}
 
void create(QUEUE *ptr, char c)
{
    ptr->value = c;
    ptr->next = new QUEUE;
}
 
void output(QUEUE *ptr)
{
    printf("\n");
    do
    {
        printf("%c ", ptr->value);
        ptr = ptr->next;
    } while (ptr->next != NULL);
    printf("%c", ptr->value);
    printf("\n\n");
}
 
QUEUE* task(QUEUE* queue1, char x, char y, char z)
{
    QUEUE* queue2 = new QUEUE;
    QUEUE* head = queue2;
 
    while (queue1->next != NULL)
    {
        if (queue1->next->value == x)
        {
            create(queue2, queue1->value);
            queue2 = queue2->next;
            create(queue2, y);
            queue2 = queue2->next;
            create(queue2, x);
            queue2 = queue2->next;
            create(queue2, z);
            if (queue1->next != NULL)
                queue2 = queue2->next;
            queue1 = queue1->next;
        }
        else
        {
            create(queue2, queue1->value);
            if (queue1->next != NULL)
                queue2 = queue2->next;
        }
        queue1 = queue1->next;
    }
    queue2->value = queue1->value;
    queue2->next = NULL;
 
    return head;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2017, 22:13
Ответы с готовыми решениями:

Очередь. Поставить перед каждым отрицательным элементом противоположный ему по значению
Помогите пожалуйста с задачей по очередям, в которой нужно поставить перед каждым отрицательным...

Вставить перед каждым элементом массива элемент с нулевым значением
Дан целочисленный массив размера N. Вставить перед каждым его элементом элемент с нулевым значением.

Перед каждым положительным элементом массива вставить нулевой элемент
Задан вещественный массив размера N. Перед каждым положительным элементом массива вставить нулевой...

Перед каждым положительным элементом массива вставить элемент с нулевым значением
Дан массив размера N. Перед каждым положительным элементом массива вставить элемент с нулевым...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2017, 22:13
Помогаю со студенческими работами здесь

Перед каждым положительным элементом массива вставить элемент с нулевым значением
Дан массив размера N. Перед каждым положительным элементом массива вставить элемент с нулевым...

Дан массив A размера N. Вставить 0 перед каждым элементом, индекс которого кратен K
Объясните. как сделать так, чтобы не создавать отдельный массив, а вставлять нули в исходный. Как...

Перед каждым положительным элементом массива вставить элемент с нулевым значением, перезаписать эти элементы во второй массив
Условие: дано массив размера N. Перед каждым положительным элементом массива вставить элемент с...

Вставить в массив перед каждым элементом 0
Считать из текстового файла массив целых чисел размерностью N<=10. Вставить перед каждым элементом,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru