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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.67
kataris
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 16
31.05.2014, 16:06     Создать класс "Односвязный список" #1
Вот задание:
Реализовать следующие функции для работы с односвязным списком:
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++ Создать класс "точка" и производный класс "отрезок"
Добавить в класс "Односвязный список" следующие функции C++
Создать класс-шаблон, реализующий односвязный список C++
C++ Из класса "Дата" с полями день, месяц, год создать класс "Время" с дополнительными полями час, минута, секунда
C++ Создать список из целых чисел. После каждого элемента, равного "х" вставить элемент, равный "у"
C++ Иерархия классов "список"-"очередь", вызов метода через класс интерфейс
C++ Создать класс "прямоугольник" и перегрузить операцию отношения "равно"
Создать динамический шаблонный класс односвязный список - List C++

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

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

Текущее время: 07:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru