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

Создание связного списка

31.05.2017, 19:27. Показов 1894. Ответов 2
Метки нет (Все метки)

нужно создать связной список, что собственно уже сделал.
что нужно:
-функции:
-root (выводит список)
-push (+1 елемент в конец списка)
-pop (-1 елемент из конца)
-shift (-1 ел. из начала)
-unshift (+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
#include <iostream>
using namespace std;
/*-------------------------------------*/
class Node
{
    public:
    int data;
    Node* next;
};
/*-------------------------------------*/
void NodeCreated(class Node* root,int n)
{
    root->data = n;
    root->next = NULL;
}
/*-------------------------------------*/
void Push (class Node* root, int n)
{
    Node* newNode = new Node;
    newNode->data = n;
    newNode->next = NULL;
    Node* dat = root;
    while (dat)
    {
        if(dat->next == NULL)
        {
            dat->next = newNode;
            return;
        }
        dat = dat->next;
    }
}
/*-------------------------------------*/
void Output(class Node* root)
{
    Node* list = root;
    while(list)
    {
        cout << list->data << "->";
        list = list->next;
    }
    cout << "NULL" << endl << endl;
}
/*-------------------------------------*/
void Shift (class Node** root)
{
    Node *roothelp = *root;
    *root = roothelp->next;
}
/*-------------------------------------*/
 
int main()
{
    class Node* newHead;
    class Node* root = new Node;
 
    NodeCreated(root,1);
    Output(root);
 
    Push(root,2);
    Output(root);
 
    Push(root,3);
    Output(root);
 
    Push(root,4);
    Output(root);
 
    Push(root,5);
    Output(root);
 
    for(int i=0;i<5;i++)
    {
        Shift(&root);
        Output(root);
    }
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2017, 19:27
Ответы с готовыми решениями:

Создание двойного связного списка целых чисел, вводимых с клавиатуры; печать списка
Люди помогите, нужно сдать последнюю Лабу. Задача: Написать программу которая создает двойной...

Создание и сортировка связного списка
Задание: Написать программу, реализующую связный список с информацией о сотрудниках и отображающую...

Сортировка связного списка
Привет всем! как правильно написать сортировку для связного циклического списка ? помогите...

Реализация связного списка
надо решить задачу: Сведения о владельце автомобиля: фамилия, марка автомобиля (строки), номер...

2
Рэмбо комнатный
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
01.06.2017, 12:05 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "stdafx.h"
#include <iostream> 
 
using namespace std;
 
struct link
{
    int data;
    link* next;
    link* prev;
};
 
class linklist
{
private:
    link* first;
    link* last;
public:
    linklist()
    {
        first = NULL;
        last = first;
    }
    ~linklist();
    void push(int n);
    void root();
    void shift();
    void unshift(int n);
    void pop();
};
 
void linklist::push(int n)
{
    link *temp = new link;
    temp->next = NULL;
    temp->data = n;
 
    if (first != NULL)
    {
        temp->prev = last;
        last->next = temp;
        last = temp;
    }
    else
    {
        temp->prev = NULL;
        first = last = temp;
    }
 
}
 
void linklist::root()
{
    link* current = first;
    while (current)
    {
        cout << current->data << "->";
        current = current->next;
    }
    cout << "NULL" << endl;
}
 
void linklist::unshift(int n)
{
    link* temp = new link;
    temp->data = n;
    temp->next = first;
    temp->prev = NULL;
    first->prev = temp;
    first = temp;
}
 
void linklist::shift()
{
    link* temp = first;
    first = first->next;
    delete[] temp;
}
 
void linklist::pop()
{
    link* temp = last;
    last = last->prev;
    last->next = NULL;
    delete[] temp;
}
 
linklist::~linklist()
{
    while (first)
    {
        last = first->next;
        delete[] first;
        first = last;
    }
}
 
int main()
{
    linklist list;
    int n, val;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> val;
        list.push(val);
    }
    list.root();
    list.pop();
    list.root();
    list.shift();
    list.root();
    cin >> val;
    list.unshift(val);
    list.root();
    list.~linklist();
    list.root();
    system("pause");
    return 0;
}
1
0 / 0 / 1
Регистрация: 23.01.2017
Сообщений: 6
01.06.2017, 15:08  [ТС] 3
спасибки

Добавлено через 1 час 25 минут
возник новый вопрос:
-програма виснет, когда выполняеться Unshift(...). В чем проблема?





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
#include <iostream>
using namespace std;
/*-------------------------------------*/
class Node
{
    public:
    int data;
    Node* next;
    Node* previous;
};
/*-------------------------------------*/
void NodeCreated(class Node* root,int n)
{
    root->data = n;
    root->next = NULL;
}
/*-------------------------------------*/
void Push (class Node* root, int n)
{
    Node* newNode = new Node;
    newNode->data = n;
    newNode->next = NULL;
    Node* dat = root;
    while (dat)
    {
        if(dat->next == NULL)
        {
            dat->next = newNode;
            return;
        }
        dat = dat->next;
    }
}
/*-------------------------------------*/
void Output(class Node* root)
{
    Node* list = root;
    while(list)
    {
        cout << list->data << "->";
        list = list->next;
    }
    cout << "NULL" << endl << endl;
}
/*-------------------------------------*/
void Shift (class Node** root)
{
    Node *roothelp = *root;
    *root = roothelp->next;
}
/*-------------------------------------*/
void Unshift(class Node* root,int n)
{
    Node* temp = new Node;
    temp->data = n;
    temp->next = root;
    temp->previous = NULL;
    root->previous = temp;
    root = temp;
}
/*-------------------------------------*/
/*-------------------------------------*/
int main()
{
    class Node* newHead;
    class Node* root = new Node;
 
    NodeCreated(root,1);
    Output(root);
 
    Push(root,2);
    Output(root);
 
    Push(root,3);
    Output(root);
 
    Push(root,4);
    Output(root);
 
    Push(root,5);
    Output(root);
 
    for(int i=0;i<4;i++)
    {
        Shift(&root);
        Output(root);
    }
    for(int i=0;i<5;i++)
    {
        Unshift(root,i);
        Output(root);
    }
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2017, 15:08
Помогаю со студенческими работами здесь

Удаление из связного списка
Вечер Добрый! Проблема с функцией удаления. Нужны советы, подсказки от гуру) Проблемная точка в...

Реализация связного списка
Помогите решить задачу Нужно написать программу без использования библиотеки list я вот...

Сортировка связного списка
Привет всем! пришлите пожалуйста код реализации сортировки односвязного списка (желательно с...

Доступ к элементам связного списка
как организовать самый простой для реализации способ чтобы получить доступ к i-му элементу в...


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

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

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