Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465

Стек и работа с ним

04.04.2012, 23:37. Показов 1248. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Мне дали задания:

1. Написать функцию для удаления всех элементов с четными номерами из односвязного списка
2. Написать функцию для добавления элемента в «середину» двусвязного списка
3. Написать функцию для добавления элемента в стек
4. Написать функцию для вывода информационных полей всех элементов двусвязного списка

Номер 3
Я написала функцию, посмотрите пожалуйста - верно же она написана? спасибо большое!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void addSTACK (STACK **head, STACK *new)
{
    STACK *ohead;
    if ((*head)==NULL)
    {
        (*head)=new;
        new->next=NULL;
    }
    else
    {
        {
            ohead=(*head);
            (*head)=new;
            new->next=ohead;
        }
    }
}
Добавлено через 40 минут
Все, эта верна, помогите пожалуйста сделать 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
#include <iostream>
#include <list>
using namespace std;
 
 
int main(){
 
    setlocale(LC_ALL, "RUSSIAN");
 
    list<int> lst;
    int n;
    int data;
 
    cout<<"1 \nВведите размер списка \n";
    cin>>n;
 
    cout<<"\nВвод данных \n";
    //ввод данных
    for(int i = 0; i < n; i++)
    {
        cin>>data;
        lst.push_back(data);
    }
    
    //Печать списка
    cout<<"\nСодержимое списка: ";
    list<int>::iterator p = lst.begin();
    while(p != lst.end()){
        cout<<*p<<" ";
        p++;
    }
 
    //удаление из списка все элементы с четными инф. полями
    p = lst.begin();
    int m;
    for(int i = 0; i < n; i++){
        if(*p%2 == 0){
            p = lst.erase(p);
        }else{
            p++;
        }
    }
    
    //Печать списка
    cout<<"\nСодержимое списка: ";
    p = lst.begin();
    while(p != lst.end()){
        cout<<*p<<" ";
        p++;
    }
 
    system("pause");
    return 0;
}
Добавлено через 39 минут
Или я задание неверно поняла?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2012, 23:37
Ответы с готовыми решениями:

Стек и работа с ним
Нужно написать программу, которая формирует стек, после удаляет минимальный элемент и выводит стек на экран.

Описать класс, реализующий стек и работу с ним
Вот вроде понял и что такое стек, и что такое классы и как их реализовать в отдельности. Но как их объеденить в одну программу...

Стек и операции с ним - проверка кода на корректность
Необходимо реализовать стек на С#(считывание без извлечения элемента стека, считывание с извлечением элемента стека, запись элемента в...

5
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.04.2012, 00:24
Цитата Сообщение от kristi1 Посмотреть сообщение
Все, эта верна
Сомнительно как-то она решена...
Цитата Сообщение от kristi1 Посмотреть сообщение
C++
1
void addSTACK (STACK **head, STACK *new)
Вот это STACK *new - что по-вашему? В стек какие-то данные должны помещаться, а вместо них вот эта непонятная конструкция (на всякий случай: слово new нельзя использовать в качестве имени переменной в С++).

Цитата Сообщение от kristi1 Посмотреть сообщение
Написать функцию для удаления всех элементов с четными номерами из односвязного списка
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
#include <iostream>
 
class IntList {
    struct Node {
        int value;
        Node * next;
        Node(int val) : value(val), next(0) {}
    };
    
    Node * pFirst;
    Node * pLast;
    
    IntList(const IntList &);
    IntList & operator = (const IntList &);
    
public:
    IntList() : pFirst(0), pLast(0) {}
    
    void add(int value) {
        Node * n = new Node(value);
        if ( ! pFirst )
            pFirst = n;
        else
            pLast->next = n;
        pLast = n;
    }
    
    void removeEven() {
        Node * p1, * p2;
        
        for ( p1 = pFirst; p1; ){
            if ( p2 = p1->next ){
                p1->next = p2->next;
                delete p2;
            }
            p1 = p1->next;
        }
    }
    
    void dump(std::ostream & ost, const char sep = ' ') const {
        for ( Node * p = pFirst; p; p = p->next )
            ost << p->value << sep;
    }
    
    virtual ~IntList() {
        while ( pFirst ){
            pLast = pFirst->next;
            delete pFirst;
            pFirst = pLast;
        }
    }
};
 
int main(){
    IntList list;
    
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    list.add(8);
    list.add(9);
    list.add(10);
    
    std::cout << "List:\n";
    list.dump(std::cout);
    list.removeEven();
    std::cout << "\nRemoved evens:\n";
    list.dump(std::cout);
    std::cout << std::endl;
    
    return 0;
}
0
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465
05.04.2012, 16:30  [ТС]
Спасибо большое Вам за функцию, по удалению, а в стеке - как тогда вы предлагаете? преподаватель давала когда-то именно так, я и не знаю по-другому как, если честно, а еще я написала 2 и 4 задание, посмотрите пожалуйста, спасибо!

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
2.
void List::addToList(string data)   //реализация функции добавления
{
    Element *temp = new Element;        //создается временный элемент
    if(pHead == NULL)           //если это первый элемент, то
    {
temp->pred = NULL;      //обнуляем указатель на предшествующий 
//элемент т.к. его нет
        temp->next = NULL;      //то же самое с последующим элементом
                pHead = temp;       //"голова" указывает на созданный элемент
    }
else                    //если не первый, то
                pPrev->next = temp;     //предыдущий указывает на него
    temp->data = data;          //копируем данные
    temp->next = NULL;  //последующего элемента нет (добавляем же в конец)
    temp->pred = pPrev;     //указываем на предыдущий элемент, на который «нацелен» pPrev
    pPrev = temp;     //а теперь хвостовой элемент указывает на последний (добавленный)
    countElem++;      //увеличиваем счетчик элементов в списке
}
 
4.
void List::printList()              //реализация функции вывода на экран списка
{
    Element *pTemp = pHead;     //создается временный элемент
 
    if (pHead == NULL)          //если список пуст, то 
    {
        cout << "Spisok pust";  //выводим соответствующее сообщение
    }
    else                    //если все такие он не пуст, то
    {
        cout << "Spisok ->: ";      
        while(pTemp != NULL)    //пока врем. элем. не будет указывать на хвост
        {
            cout << pTemp->data + ' ';  //выводим данные элемента
            pTemp = pTemp->next;    //и переходим на следующий за ним элем.
        }
    cout << endl;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.04.2012, 17:19
Цитата Сообщение от kristi1 Посмотреть сообщение
а в стеке - как тогда вы предлагаете?
Вот так как-нибудь:
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
#include <iostream>
#include <stdexcept>
 
class IntStack {
    struct Node {
        int value;
        Node * next;
        Node(int val, Node * prev = 0) : value(val), next(prev) {}
    };
    
    Node * top;
    
    IntStack(const IntStack &);
    IntStack & operator = (const IntStack &);
public:
    IntStack() : top(0) {}
    virtual ~IntStack() {
        Node * ptr;
        
        while ( ptr = top ){
            top = top->next;
            delete ptr;
        }
    }
    
    bool empty() const { return ( ! top ); }
    
    void push(int value) {
        Node * n = new Node(value, top);
        top = n;
    }
    
    int pop() {
        if ( empty() )
            throw ( std::runtime_error("Empty stack!") );
        
        int ret = top->value;
        Node * n = top;
        top = top->next;
        delete n;
        
        return ret;
    }
};
 
int main(){
    IntStack stack;
    stack.push(13);
    stack.push(69);
    stack.push(95);
    
    while ( ! stack.empty() ){
        int val = stack.pop();
        std::cout << val << ' ';
    }
    std::cout << std::endl;
    
    return 0;
}
1
11 / 11 / 2
Регистрация: 07.03.2010
Сообщений: 465
05.04.2012, 17:23  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
void push(int value) { Node * n = new Node(value, top); top = n; }
Получается это функция добавления в стек, как я поняла, а остальные функции вы не погли бы посмотреть? спасибо большое!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
06.04.2012, 01:22
Цитата Сообщение от kristi1 Посмотреть сообщение
а остальные функции
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
#include <iostream>
#include <stdexcept>
 
class TwoWayIntList {
    struct Node {
        int value;
        Node * prev;
        Node * next;
        Node(int val, Node * p = 0, Node * n = 0) : value(val), prev(p), next(n) {}
    };
    
    Node * first;
    Node * last;
    size_t count;
    
    TwoWayIntList(const TwoWayIntList &);
    TwoWayIntList & operator = (const TwoWayIntList &);
    
public:
    TwoWayIntList() : first(0), last(0), count(0) {}
    
    virtual ~TwoWayIntList() {
        while ( first ){
            last = first->next;
            delete first;
            first = last;
        }
    }
    
    void add(int value) {
        Node * node = new Node(value);
        if ( ! first )
            first = node;
        else {
            node->prev = last;
            last->next = node;
        }
        last = node;
        count += 1;
    }
    
    void insertAfter(size_t pos, int value) {
        if ( pos > count  )
            throw ( std::runtime_error("Out of bounds") );
        
        Node * node = new Node(value);
        if ( pos == 0 ) {
            node->next = first;
            first->prev = node;
            first = node;
        }
        else if ( pos == count ) {
            node->prev = last;
            last->next = node;
            last = node;
        }
        else {
            Node * ptr = first;
            while ( --pos )
                ptr = ptr->next;
            node->prev = ptr;
            node->next = ptr->next;
            ptr->next->prev = node;
            ptr->next = node;
        }
        count += 1;
    }
    
    size_t getCount() const { return count; }
    
    void dump(std::ostream & ost, const char sep = ' ') {
        for ( Node * n = first; n; n = n->next )
            ost << n->value << sep;
    }
    
    void reverseDump(std::ostream & ost, const char sep = ' ') {
        for ( Node * n = last; n; n = n->prev )
            ost << n->value << sep;
    }
};
 
int main() {
    TwoWayIntList list;
    
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    
    std::cout << "Forward:" << std::endl;
    list.dump(std::cout);
    std::cout << "\nBackward:" << std::endl;
    list.reverseDump(std::cout);
    std::cout << std::endl;
    
    list.insertAfter((list.getCount() + (list.getCount() & 1)) / 2, 13);
    
    std::cout << "Forward:" << std::endl;
    list.dump(std::cout);
    std::cout << "\nBackward:" << std::endl;
    list.reverseDump(std::cout);
    std::cout << std::endl;
    
    list.insertAfter((list.getCount() + (list.getCount() & 1)) / 2, 69);
    
    std::cout << "Forward:" << std::endl;
    list.dump(std::cout);
    std::cout << "\nBackward:" << std::endl;
    list.reverseDump(std::cout);
    std::cout << std::endl;
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2012, 01:22
Помогаю со студенческими работами здесь

Реализовать стек и 3 оператора для работы с ним
Доброго времени суток! Помогите, есть такая задача: Реализовать стек и 3 оператора для работы с ним (Push (x, S), Locate (х, S),...

Описать класс, реализующий стек и работу с ним
Добрый день. Написал программу, суть которой в том, что нужно описать класс, реализующий стек. Класс содержит сведения о студентах,...

Организовать стек из однородного массива и реализовать действия с ним
Здравствуйте, я только что зарагестрировался на форуме и не знаю всех правил, так что прошу простить, если что не так делаю. А задача...

Как можно создать стек и производить операции над ним?
Как можно создать стек и производить операции над ним? Читал различную литературу, но хорошего объяснения так и не нашел. Где-то пишут, что...

Массив: С помощью одномерного массива организовать стек и реализовать набор команд для работы с ним...
С помощью одномерного массива организовать стек и сделать следующие действия с ним: Элементами стека являются слова не более чем из 20...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru