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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.67
kataris
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 16
#1

Создать класс "Односвязный список" - C++

31.05.2014, 16:06. Просмотров 6468. Ответов 0
Метки нет (Все метки)

Вот задание:
Реализовать следующие функции для работы с односвязным списком:
1. Вывод списка. Выводятся все элементы в соответствии с их порядком расположения в списке.
2. Вставка элемента в заданную позицию списка. Эта функция вставляет значение х в заданную позицию р в списке, где p=1, 2,…n, n+1. Если список содержит элементы a1, a2, ..., аn, то после выполнения этой функции список будет иметь вид а1, а2, ..., ар-1, х, ар, ..., a n.. Если р принимает значение n+1, то будем иметь a1 , a2, , ..., an ,, х. Если в списке нет позиции р, то оставить список без изменения.
3. Удаление элемента из заданной позиции списка. Эта функция удаляет элемент в позиции р списка, где p=1, 2,…n. Так, если список состоит из элементов a1, a2, ..., аn , то после выполнения этого оператора количество элементов уменьшится на единицу, а список будет иметь вид а1, а2, ...,, ap-1 ,ap+1, ..., аn. Оставить список без изменения, если в списке нет позиции р.
4. Удаление всех элементов из списка.
5. Проверка списка на упорядоченность его элементов. Функция должна возвращать одно из трех значений: 0 — если элементы не упорядочены, 1 — если элементы упорядочены по возрастанию, 2 — если элементы упорядочены по убыванию.
6. Объединение двух списков. В результате должен получиться третий список, в котором элементы списков чередуются до тех пор, пока один из списков не будет исчерпан. Оставшийся «хвост» более длинного списка помещается в конец нового списка.
Вот его решение:
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include<clocale>
using namespace std;
struct item
{
    int data;
    item *next;
    
};
//функция добавления элемента x в заданную позицию pos односвязного списка
void add(item *&top,int pos, int x)
{
    int j=1;
    int i; item *pnew, *p=top;
    pnew=new item; pnew->data=x;
    if (pos<=1||top==NULL) 
    {
        pnew->next=top; top=pnew;
    }
    else
    {
        for(i=1;i<pos-1;i++) 
            if (p->next!=NULL) 
            {    
                p=p->next;
                j++;
            }
        if (pos<=j+1)
        {
            pnew->next=p->next; p->next=pnew;
        }
    }
}
// вспомогательная функция для вывода списка
void print(item *top)
{
    item *p=top;
    while (p!=NULL) 
    {
        cout<<p->data<<' '; 
        p=p->next;
    }
    cout<<endl;
}
//удалить все элементы
void clrscr(item *&top)
{
    while(top!=NULL)
    { 
        if(top==NULL) 
        { 
            cout<<"спиок пуст!"<<endl; 
        }
        else 
        {
            item *p=top;
            top=top->next; 
            delete p; 
       }
    }
}
//удаление элемента с заданной позиции 
void delet(item *&top, int pos2)
    {
        item *a=top,*b;
        int i=0;
        while(a!=NULL)
        {
            a=a->next;
            i++;
        }
        if(pos2>i||pos2<1) 
        {
            cout<<"такой позиции в списке нет!"<<endl;
        }//проверка на сущ-е позиции
        
        else
        {
            if(pos2==1)
            {
                a=top->next;//если эл-т первый
                top=a;
            }
            if (pos2>1)
            {
                i=1;//если эл-т не первый
                a=top;
                while (i!=pos2-1) 
                {
                    i++; a=a->next;
                }
                b=a->next;
                a->next=b->next;//сдвигаем
                delete b;
            }
        }
}
//............................порядок............
int poryadok(item *top)
               { item *q1,*q2;
int l;
q1=top;//указатель на вершину списка
int i=0;int pos=0;
int j=0;
while (q1!=NULL){
    q2=q1->next;
    l=q1-q2;
    q1=q1->next;
    pos++;
        if(l>0){i++;}
        else {j++;}
}if(i==pos){cout<<"упорядочено по убыванию\n";}
else {if(j==pos){cout<<"упорядочено по возрастанию\n";}
else{cout<<"не упорядочено\n";}}
return 0;}
//........................объединение...............
void obedinenie(item *top){
    cout<<"список 1: ";
     print(top);int b;int a;int r;int c;int i;int f;
     item *p;
     cout<<"введите количество элементов в списке: ";
        cin>>b;
        if (b!=0)
            for (int f=1; f<=b; f++) // формирование списка
            {
                a=rand()%100;
                add(top,f,a); // вставка элемента 
            }
            cout<<"список 2: ";
        print(top); // вывод списка на экран
        int k=4;int g=k+b;
        if(g!=0)
            for (int h=1;h<=g;h++)
            {if(!(h%2)){ cout<<p->data<<' '; 
        p=p->next;}
            else{ cout<<p->data<<' '; 
        p=p->next;}}
}
int main() {
    setlocale(LC_ALL,"Russian");
     int pos, pos1, pos2, otv, da;
     item *first, *last;
     int x,r,k,m,y,j;
    item *top=NULL;
    
        cout<<"введите количество элементов в списке: ";
        cin>>k;
        if (k!=0)
            for (int i=1; i<=k; i++) // формирование списка
            {
                r=rand()%100;
                add(top,i,r); // вставка элемента 
            }
        print(top); // вывод списка на экран
        
    
        cout<<"Введите номер позиции для вставки: ";
        cin>>pos;
        cout<<"Введиде значение элемента для вставки: ";
        cin>>x;
        add(top,pos,x); // добавление элементов в любую позицию списка
        print(top);
    
        cout<<"Введите номер позиции элемента для удаления: ";
        cin>>pos2;
        delet(top,pos2);
        print(top);
        poryadok(top);
        obedinenie(top);
        cout<<"Удалить все элементы? да-1, нет-2 : ";
        int l;
        cin>>l;
        if (l==1){
            void clrscr(item *&top);
                cout<<"Элементы удалены.";
        }
        else {cout<<"элементы не удалены : ";
        print(top);
        }
    cin.get();
    cin.get();
}
Теперь мне нужно реализовать не односвязный список,а класс, выполняющий эти же функции
Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 16:06     Создать класс "Односвязный список"
Посмотрите здесь:

Добавить в класс "Односвязный список" следующие функции - C++
1. Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции,...

Создать класс "Список объектов любого типа" - C++
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого класса). Помогите кто знает (Нужен код,...

Создать класс "Список объектов любого типа" - C++
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого класса). #include &lt;iostream&gt; ...

Обработка пользовательского класса "Односвязный линейный список" - C++
Доброго времени суток. Хочу написать программу для обработки односвязного линейного списка (ОЛС) которая заключается в изменении начального...

Реализовать односвязный список данных вида "Страна, город, количество населения" - C++
Поставлена задача реализовать односвязный список данных вида Страна город количество населения Обеспечить выполнение операций: ...

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

Реализовать односвязный список для хранения и операций с данными вида "Количество внешних связей" - C++
Реализовать односвязный список для хранения и операций с данными вида: Объект Количество внешних связей Внешние связи Обеспечить...

Создать динамический шаблонный класс односвязный список - List - C++
помогите пожалуйста с задание в универ задали и я вот сижу парюсь! буду очень вам благодарен Создать динамический шаблонный класс...

Класс "Список", функция добавления элемента в конец - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct myElem { char *line; myElem *next; ...

Реализовать класс "Книжный магазин", используя двусвязный список (ошибка с покупкой книги) - C++
Доброго времени суток,мне нужно реализовать класс BookShop используя двусязный список,все методы работают,кроме buyBook,его нужно...

Непонятные ошибки. Класс "Список" - C++
// list.h namespace my { // Exeptions class ListIsEmpty{/* ... */}; class ArgumentIsIncorrect{/* ... */}; ...

Реализовать класс "Двухсвязный список" - C++
Помогите напить программу. Нужно из готового кода написать программу, которая бы создавала линейный односвязный (двухсвязный) список. Из...


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

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

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