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

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

Войти
Регистрация
Восстановить пароль
 
Artur_L
Сообщений: n/a
#1

Однонаправленный список элементов (удвоить каждый элемент списка) - C++

12.05.2013, 21:50. Просмотров 502. Ответов 2
Метки нет (Все метки)

Сформировать однонаправленный список элементов типа char и написать программу следующих операций над ним: а) удвоить каждый элемент списка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 21:50     Однонаправленный список элементов (удвоить каждый элемент списка)
Посмотрите здесь:
C++ Линейно-однонаправленный список (удалить элемент списка по ключу)
C++ Реализуйте однонаправленный список.Режим сортировки элементов списка без перестановки самих элементов
C++ Однонаправленный список из квадратов отрицательных элементов первого списка
Реализовать двухсвязный список. Каждый элемент списка может содержать один объект C++
C++ Добавить в список элемент после элемента с заданным инф.полем [Однонаправленный список]
C++ Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство
C++ Кольцевой однонаправленный список, вывод списка на экран
Однонаправленный связный список с полями данных в самом узле списка C++
C++ Организовать ввод в однонаправленный список; подсчитать сумму чисел списка
C++ однонаправленный список: элементы добавляются и удаляются с начала, просматриваются с конца списка
Однонаправленный список: как ввести значение в head и последующие узлы списка? C++
Однонаправленный список, где создать указатель на первый элемент? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.05.2013, 22:40     Однонаправленный список элементов (удвоить каждый элемент списка) #2
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
#include <iostream>
 
struct Onode
{
    char ch;
    Onode* next;
};
 
class SNode
{
    public:
        SNode()
        {
            pt_main = 0;
        }
 
        SNode(const char ch)
        {
            pt_main = 0;
            Onode* tmp = new Onode;
            tmp->ch = ch;
            tmp->next = pt_main;
            pt_main = tmp;
        }
 
        ~SNode();
 
        Onode* push_front(const char);
        void show();
        Onode* double_length();
 
        friend struct Onode;
 
    private:
        SNode(const SNode&);
        SNode& operator=(const SNode&);
        
        Onode* pt_main;
};
 
SNode::~SNode()
{
    if (pt_main) 
    {
        Onode* tmp = pt_main;
        while (tmp)
        {
            pt_main = pt_main->next;
            delete tmp; 
            tmp = pt_main;
        }
        pt_main = 0;
    }
}
 
Onode* SNode::push_front(const char ch)
{
    Onode* node = new Onode;
    node->ch = ch;
    node->next = pt_main;
    pt_main = node;
    return node;
}
 
void SNode::show()
{
    Onode* tmp = pt_main;
    unsigned cn = 0;
 
    while (tmp)
    {
        std::cout << ++cn << ": " << tmp->ch << std::endl;
        tmp = tmp->next;
    }
}
 
Onode* SNode::double_length()
{
    Onode* tmp = pt_main;
    char ch;
 
    while (tmp)
    {
        ch = tmp->ch;
        this->push_front(ch);
        tmp = tmp->next;
    }
    return pt_main;
}
 
int main()
{
    SNode obj('H');
    obj.push_front('e');
    obj.push_front('l');
    obj.push_front('l');
    obj.push_front('o');
    obj.push_front('!');
 
    obj.double_length();
 
    obj.show();
 
    return 0;
}
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.05.2013, 22:49     Однонаправленный список элементов (удвоить каждый элемент списка) #3
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
#include <iostream>
#include <conio.h>
 
template <class T>
struct Node
{
    Node<T>* Next;
    T Data;
    Node();
explicit Node(T &_Data);
};
template <class T>
Node<T>::Node()
        : Next(NULL)
{   
}
template <class T>
Node<T>::Node(T &_Data)
        :Data(_Data), Next(NULL)
{   
}
 
template <class T>
class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    void Clear();
    void Doubling();
    void AddFront(T &_Data);
    void AddEnd (T &_Data);
    void PrintList();
 
private:
    Node<T> *Head,  *Curr;
};
 
template <class T>
void LinkedList<T>::Doubling()
{
    if( Head == NULL)
    {
       return;
    }
    Curr = Head;
    while (Curr)
    {
       Node<T> *newNode = new Node<T>(Curr->Data);
       newNode->Next = Curr->Next;
       Curr->Next = newNode;
       Curr = newNode->Next;
    }
}
 
template <class T>
void LinkedList<T>::PrintList()
{
    Curr = Head;
    while (Curr)
    {
        std::cout << Curr->Data << ' ';//<< std::endl;
       Curr = Curr->Next;
    }
}
 
template <class T>
void LinkedList<T>::AddFront(T &_Data)
{
    Node<T> *newNode = new Node<T>(_Data);
    if( Head == NULL)
    {
       Head = newNode;
    }
    else
    {
       newNode->Next = Head;
       Head = newNode;
    }   
}
 
template <class T>
void LinkedList<T>::AddEnd(T &_Data)
{
    Node<T> *newNode = new Node<T>(_Data);
    if( Head == NULL)
    {
       Head = newNode;
    }
    else
    {
        Curr = Head;
        while(Curr )
        {
          Curr = Curr ->Next;
        }
       Curr ->Next = newNode;
    }
}
template <class T>
void LinkedList<T>::Clear()
{
    Node<T> *node = NULL;
    Curr = Head;
    while(Curr)
    {
        node = Curr->Next;
        delete Curr;
        Curr = node;
    }
    Head = NULL;
}
template <class T>
LinkedList<T>::LinkedList()
    :Head(NULL), Curr(NULL)
{
}
template <class T>
LinkedList<T>::~LinkedList()
{
    Clear();
}
 
int main()
{
        LinkedList<char> list;
        for (char i = 'A'; i < 'G'; i++)
        list.AddFront(i);
        std::cout << "\nList :\n";
        list.PrintList();
        list.Doubling();
        std::cout << "\n\nNew list :\n";
        list.PrintList();
        list.Clear();
    getch();
}
Ответ Создать тему
Опции темы

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