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

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

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

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

13.05.2014, 01:54. Просмотров 324. Ответов 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++
Двунаправленный список.Найти сумму первого и последнего элемента.Заранее спасибо

Нахождение последнего отрицательного элемента массива - C++
Программа ищет последний отрицательного элемент массива. Не могу понять ошибки программы: 3 from F:\...\2_17.C In file included from...

Нахождение первого и последнего максимального элемента - C++
Найти номера первого и последнего максимального элемента из данного набора и вывести их в указанном порядке.

Составить программу, которая вставляет в список L новый элемент F перед первым вхождением элемента Е - C++
на с++. Составить программу, которая вставляет в список L но¬вый элемент F перед первым вхождением элемента Е, если Е входит в L.

Нахождение последнего элемента одномерного числового массива, который больше 1 - C++
доброго времени суток,Вам. напишите пожалуйста программу, которая будет находить последний элемент одномерного числового массива,который...

Нахождение максимального элемента в массиве и его индекс (элемента) - C++
Доброго времени суток. Вот исходный код поиска максимального элемента массива: #include&quot;stdafx.h&quot; #include&quot;stdio.h&quot; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
uhx
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
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
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
13.05.2014, 03:01 #3
Мда...
Миниатюры
Нахождение последнего элемента и перестановка его перед первым (списки)  
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
13.05.2014, 03:02  [ТС] #4
Извините пожалуйста, я немного не поняла.. Этот кусочек программы, который Вы дали, он работает, если его вставить в мою программу?
uhx
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
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
Сообщений: 153
13.05.2014, 03:20  [ТС] #6
У меня выдает ошибку : используется потенциально неинициализированная локальная переменная-указатель "temp".

Добавлено через 5 минут
О) Все заработало)) Я поставила :
C++
1
List *cyb = Head, *temp=Head;
.
Спасибо Вам огромное!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2014, 03:20
Привет! Вот еще темы с ответами:

Получить разницу между первым элементом последовательности и числом, стоящим перед первым отрицательным - C++
Даны действительные числа а1, а2, .... Известно, что а1&gt; 0 и что среди а2, а3, ... есть хотя бы одно отрицательное число. Пусть a1, ..., an...

Для каждого Ai, начиная с последнего и заканчивая первым, вывести его квадратный корень не менее чем с четырьмя знаками после запятой - C++
задача звучит так &quot;Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018), отделённых друг от друга произвольным количеством пробелов...

Списки. Найти среднее арифметическое и вычесть его из каждого элемента списка - C++
Сформировать однонаправленный список целых чисел. Описать функцию, которая находит среднее арифметическое элементов списка и вычитает это...

Нахождение максимального элемента и его номера в дереве - C++
сама проблема находится в том чтобы найти номер максимального эл. #include &quot;stdafx.h&quot; # include &lt;iostream&gt; # include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2014, 03:20
Ответ Создать тему
Опции темы

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