Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++, задача. Движение каретки http://www.cyberforum.ru/cpp-beginners/thread1194623.html
Доброго времени суток! Задача: движение каретки ( символа '|' ) в консоли по вертикали и горизонтали. В общем по горизонтали с пом цикла for решил задачу. А по вертикали решил использовать...
C++ Добавить заголовок для произвольного файла Добрый день! Помогите пожалуйста разобраться, почему не работает программа. Для произвольного файла, используя класс fstream, нужно разработать метод, позволяющий добавить заголовок размером 100... http://www.cyberforum.ru/cpp-beginners/thread1194620.html
C++ Создать класс с перегруженными функциями и продемонстрировать различные способы наследования
* Задача: создать класс с различными (по типу доступа) членами, перегруженными функциями и продемонстрировать различные способы наследования. (Класс сконструировать по своему усмотрению) Добавлено...
не получается написать перегруженную функцию, которая возвращает значение в зависимости от набора формальных C++
Которая возвращает значение в зависимости от набора формальных параметров:z=min(x,y)для 3 типов параметра x:int, float; double Я начал делать, однако, не уверен, правильно ли начал. Задание то не...
C++ Почему нужно noexcept? http://www.cyberforum.ru/cpp-beginners/thread1194595.html
Здравствуйте. Сразу код :) : class logic_error_ext : public std::exception { private: std::string mesg; bool type; //if 0 - error in hmean(), 1 - in gmean() public: explicit...
C++ Требуется написать программу для перевода чисел из 2-ой в 16-ую СС Исходный текстовый файл содержит числа в двоичной системе счисления, отделенные друг от друга хотя бы одним пробелом. Требуется составить программу, которая под каждым двоичным числом в файле... подробнее

Показать сообщение отдельно
kataris
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 16

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

31.05.2014, 16:06. Просмотров 6972. Ответов 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();
}
Теперь мне нужно реализовать не односвязный список,а класс, выполняющий эти же функции
Помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.