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

Перемещение элементов односвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ методы класса http://www.cyberforum.ru/cpp-beginners/thread821214.html
Доброго времени суток! Заранее извиняюсь за тупку. Чем отличаются вызовы c.printMe(); c.printMe; Первый понятно, реализовал метод, выводит на экран объект. А второй что за зверь?
C++ Чтение строки из файла и запись (GUI) Здравствуйте. Собственно находил исходы я на эту тему только для консолек, работаю в визуалке, и когда переделываю код под WinForms то получаются косяки которые я к сожалению исправить не могу. Дак вот. Где найти инфу именно по C++/CLI. Или хотя бы переделать. Что требуется: 1) Прочитать файл 2) Найти нужную строку или по названию 3) Заменить найденные данные Всё это в GUI. http://www.cyberforum.ru/cpp-beginners/thread821212.html
Блок-Схема. Вывести список и число слов, длинна которых меньше 5 символов C++
помогите пожалуйста составить блок-схему к программе Программа: из слов строки, разделенных пробелом, создается однонаправленный список/стек, вывести этот список и вывести число слов, длинна которых меньше 5 символов #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <string.h> #include <locale.h>
Вывести массив и распечатать адреса C++
Написал код для задачи, но программа немного не так работает. Не получается правильно построить массив, распечатать адреса и произведение. Помогите пожалуйста! Дана динамическая целочисленная матрица. Построить динамический одномерный массив, каждый элемент которого равен сумме элементов одной строки исходной матрицы. Освободить память от матрицы, найти произведение элементов одномерного...
C++ Подскажите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread821176.html
У меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и отмена. дальше ни чего не происходит, жать кнопки бесполезно можно только закрыть окно. у меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и отмена. дальше ни чего не...
C++ Програмированние цикла с постусловием помогите пожалуйста, не могу понять как это написать (Борланд СИ изучаем месяц) http://s018.***********/i504/1303/9f/ae9a9c04c2e8.jpg Добавлено через 15 часов 34 минуты ап!!! подробнее

Показать сообщение отдельно
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
28.03.2013, 19:52
dude45, вот вам написал

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
// obr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <locale>               //для работы с юникод строками
using namespace std;
 
struct List
{
    int data;                   //данные(список состоит из последоват целых)
    List *next;                 //указатель на следующий элемент списка
};
  
void DeleteList(List *_Head)        //функция освобождения выделенной памяти
{
    List *temp = _Head;             //указываем на начало списка
    List *cur = NULL;               //промежуточная переменная
 
    while(temp != NULL)             //пока список не пуст
    {
        cur = temp -> next;         //указываем на след после удаляемого
        delete temp;                //удялем элемент
        temp = cur;                 //текущий равен последующему
    }
}
 
List *addToBack(List *_Head, const int value)                 //добавление в конец
{
    List *Ptr = new List;                   //выделяем память под новый элемент
    Ptr -> data = value;                        //инициализируем
 
    if(_Head == NULL)                   //если список пуст
    {
        _Head = Ptr;                    //голова равна новому эл-ту
        Ptr -> next = NULL;             //следующего нет
    }
    else                                        //если список не пуст
    {
        List *temp = _Head;                     //указываем на начало списка
 
        while(temp -> next != NULL)             //проходим по списку до конца
            temp = temp -> next;
                
        temp -> next = Ptr;                 //последний указывает на новый
        Ptr -> next = NULL;                 //новый становится последним
                                            //(NULL служет признаком конца списка)
    }
 
    return _Head;                           //возвращаем указатель на начало списка
}
 
List *addToFront(List *_Head, const int value)             //добавление в начало
{
    List *Ptr = new List;                       //выделяем память под новый элемент
    Ptr -> data = value;                            //инициализируем
 
    Ptr -> next = _Head;                            //новый указывает на начало
    _Head = Ptr;                                //новый становится головой списка
 
    return _Head;                           //возвращаем указатель на начало списка
}
 
void delList(List *_Head, const int value)          //удаляем элемент списка
{
    List *tmp = _Head;                      //указываем на начало списка
    List *cur = NULL;                       //промежуточная переменная
 
    if(_Head != NULL)                       //если список не пуст
    {
        if((_Head -> data) == value)                 //если удаляем 1 элемент
        {
            cur = _Head -> next;            //промежуточный равен второму эл-ту
            delete _Head;               //удаляем первый
            _Head = cur;                //первый равен второму
        }
        else                        //если удаляем не первый элемент
        {
            while((tmp != NULL) && (tmp -> data != value))      
                //идем пока не найдем или пока список не закончится
            {
                cur = tmp;                      //предыдущий элемент
                tmp = tmp -> next;              //текущий элемент
            }
 
            if(tmp -> next == NULL)                 //если элемент между 1 и последним
            {      
                cur -> next = tmp -> next;          //предыдущий указывает на следующи
                                                    //после удаляемого
                delete tmp;                         //удалячем
            }
            else                                    //если элемент последний
            {
                delete tmp;                         //удалячем
                cur -> next = NULL;                 //предпоследний указывает на NULL
                                                    //т.е. после стал последним
            }
        }
    }
}
 
void showList(List *_Head)              //выводим список на консоль
{
    List *temp = _Head;                 //указатель на начало списка
 
    if(_Head != NULL)                   //если список не пуст
    {
        while(temp != NULL)             //идем по списку
        {
            cout << temp -> data << " ";        //выводим текущий элемент
            temp = temp -> next;                    //переходим на следующий
        }
 
        cout << "\n";
    }
    else
        wcout << L"Список пуст!\n";
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));            //для вывод на консоли кириллицы
 
    List *Head = NULL;                      //список изначально пуст
    int value;                              //переменная для инициализации
 
    for(int i = 0; i < 10; ++i){            //вводим 10 элементов и заполняем список
        wcout << L"Введите число: ";
            cin >> value;
 
        if(value >= 0)                          //если положит
            //добюавляем в начало и возвращаем указатель на начало списка
            Head = addToFront(Head, value);     
        else
            //иначе добавляем в конец списка и возвращаем указатель на начало списка
            Head = addToBack(Head, value);
 
        showList(Head);                 //выводим список каждый раз после
                                        //добавления нового элемента
    }
 
    DeleteList(Head);                   //удаляем все что выделили
 
    cout << "\n\n";
    return 0;
}
Добавлено через 21 минуту
dude45, вот вашим методом написал, извините что не ищу у вас, уж очень плохо написали, читать трудно...

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
// obr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <locale>               //для работы с юникод строками
#include <stdio.h>
#include <conio.h>
 
struct List
{
    int inf;
    List *next;
};
 
void main()
{
    int value, size = 5;
 
    List *head = NULL, *ptr, *cur;
 
    /*инициализируем список*/
    for (int i=0; i < size; ++i)
    {
        printf ("Vvedite %d element: ", i + 1);
        scanf ("%d", &value);
        
        ptr = new List;
        ptr -> inf = value;
 
        if(head == NULL)
        {
            head = ptr;
            ptr -> next = NULL;
        }
        else
        {
            if(ptr -> inf >= 0)
            {
                ptr -> next = head;
                head = ptr;
            }
            else
            {
                cur = head;
                while(cur -> next != NULL)
                    cur = cur -> next;
 
                cur -> next = ptr;
                ptr -> next = NULL;
            }
        }
 
        /*выводим список*/
        cur = head;
        while(cur != NULL){
            printf("%d ",cur -> inf);
            cur = cur -> next;
        }
 
        printf("\n");
    }
 
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru