Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 152
#1

Нахождение последнего элемента и перестановка его перед первым (списки) - C++

13.05.2014, 01:54. Просмотров 263. Ответов 5
Метки нет (Все метки)

Добрый всем вечер. У меня возник вопрос. Я написала программу, которая вводит список и выводит. Но как найти последний его элемент и поставить его перед первым, я не знаю. Долго мучилась. Помогите пожалуйста.
Вот моя программа.(работает ввод и вывод списка)
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct List
{
    int inf;
    List *Link;
};
 
void InitP(List *&Head)
{
    Head = NULL;
}
 
 
void CreateP(List *&Head)
{
 
    List *p = new List;
    cin >> p->inf;
    p->Link = NULL;
 
    if (Head == NULL)
        Head = p;
    else
    {
        List *Temp = Head;
        while (Temp->Link != NULL)
            Temp = Temp->Link;
        Temp->Link = p;
    }
 
}
void PrintP(List *Head)
{
 
    List *q = Head;
    if (Head == NULL)
    {
        cout << "Список пуст = 0" << endl;
        return;
    }
    cout << endl;
 
    while (q != NULL)
    {
        cout << q->inf << endl;
        q = q->Link;
 
    }
}
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "RUS");
 
    List *Head;
    Head = NULL;
 
 
    InitP(Head);
    int i, n;
    cout << "Введите кол-во элементов списка: ";
    cin >> n;
    cout << "Введите элементы : " << endl;
    for (i = 1; i <= n; i++)
 
    CreateP(Head);
 
    cout << endl;
    cout << "Ваш список: " << endl;
    PrintP(Head);
    cout << endl;
 
 
    
 
    _getch();
 
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2014, 01:54     Нахождение последнего элемента и перестановка его перед первым (списки)
Посмотрите здесь:

C++ Нахождение последнего отрицательного элемента массива
C++ Для каждого Ai, начиная с последнего и заканчивая первым, вывести его квадратный корень не менее чем с четырьмя знаками после запятой
C++ Нахождение последнего элемента одномерного числового массива, который больше 1
Списки. Найти сумму первого и последнего элемента C++
C++ Получить разницу между первым элементом последовательности и числом, стоящим перед первым отрицательным
Нахождение максимального элемента в массиве и его индекс (элемента) C++
Списки. Найти среднее арифметическое и вычесть его из каждого элемента списка C++
C++ Перестановка первого и последнего элементов структуры
C++ Нахождение первого и последнего максимального элемента
Нахождение максимального элемента и его номера в дереве C++
Составить программу, которая вставляет в список L новый элемент F перед первым вхождением элемента Е C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 302
13.05.2014, 02:51     Нахождение последнего элемента и перестановка его перед первым (списки) #2
Охх... ну и криво же все вышло
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void cyberforum(List* &Head){
    List *cyb = Head, *temp;
 
    while(cyb->Link){ // Доходим до конца списка
        temp = cyb;
        cyb = cyb->Link;
    }
    List *p = new List;
    p->inf = Head->inf;
    p->Link = Head->Link;
    Head->inf = cyb->inf;
    Head->Link = p;
    temp->Link = NULL;
    delete[] cyb;
}
Добавлено через 4 минуты
9-10 строки - бред полный.
p = Head; не получается, ибо он почему-то в p->Link записывает указатель на Head и когда мы меняем саму голову, то меняется и этот p ...
Хотя должен по идее в p->Link писать Head->Link...
temp пришлось добавить - потому что не смог догнать, как мне просто обнулить cyb, чтобы указатель предпоследнего элемента упирался в NULL... Пришлось "руками", так сказать.
Ну а остальное вроде понятно.
uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 302
13.05.2014, 03:01     Нахождение последнего элемента и перестановка его перед первым (списки) #3
Мда...
Миниатюры
Нахождение последнего элемента и перестановка его перед первым (списки)  
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 152
13.05.2014, 03:02  [ТС]     Нахождение последнего элемента и перестановка его перед первым (списки) #4
Извините пожалуйста, я немного не поняла.. Этот кусочек программы, который Вы дали, он работает, если его вставить в мою программу?
uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 302
13.05.2014, 03:04     Нахождение последнего элемента и перестановка его перед первым (списки) #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rura Посмотреть сообщение
Извините пожалуйста, я немного не поняла.. Этот кусочек программы, который Вы дали, он работает, если его вставить в мою программу?
Ага.
Пихаешь эту функцию куда-нибудь, используешь ее и выводишь список..

Добавлено через 1 минуту
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct List
{
    int inf;
    List *Link;
};
 
void InitP(List *&Head)
{
    Head = NULL;
}
 
 
void CreateP(List *&Head)
{
 
    List *p = new List;
    cin >> p->inf;
    p->Link = NULL;
 
    if (Head == NULL)
        Head = p;
    else
    {
        List *Temp = Head;
        while (Temp->Link != NULL)
            Temp = Temp->Link;
        Temp->Link = p;
    }
 
}
void PrintP(List *Head)
{
 
    List *q = Head;
    if (Head == NULL)
    {
        cout << "Список пуст = 0" << endl;
        return;
    }
    cout << endl;
 
    while (q != NULL)
    {
        cout << q->inf << endl;
        q = q->Link;
 
    }
}
 
void cyberforum(List* &Head){
    List *cyb = Head, *temp;
 
    while(cyb->Link){ // Доходим до конца списка
        temp = cyb;
        cyb = cyb->Link;
    }
    List *p = new List;
    p->inf = Head->inf;
    p->Link = Head->Link;
    Head->inf = cyb->inf;
    Head->Link = p;
    temp->Link = NULL;
    cyb = NULL;
}
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "RUS");
 
    List *Head = new List;
    Head = NULL;
 
    int i, n;
    cout << "Введите кол-во элементов списка: ";
    cin >> n;
    cout << "Введите элементы : " << endl;
    for (i = 1; i <= n; i++)
 
    CreateP(Head);
 
    cout << endl;
    cout << "Ваш список: " << endl;
    PrintP(Head);
    cout << endl;
    cyberforum(Head);
    PrintP(Head);
    system("pause > nul"); // Пауза без комментариев и лог-файлов.
    return 0;
}
Если так проще...
Миниатюры
Нахождение последнего элемента и перестановка его перед первым (списки)  
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 152
13.05.2014, 03:20  [ТС]     Нахождение последнего элемента и перестановка его перед первым (списки) #6
У меня выдает ошибку : используется потенциально неинициализированная локальная переменная-указатель "temp".

Добавлено через 5 минут
О) Все заработало)) Я поставила :
C++
1
List *cyb = Head, *temp=Head;
.
Спасибо Вам огромное!!!
Yandex
Объявления
13.05.2014, 03:20     Нахождение последнего элемента и перестановка его перед первым (списки)
Ответ Создать тему
Опции темы

Текущее время: 05:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru