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

Удаление элемента из середины дека

21.06.2013, 22:13. Показов 3218. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите уже, ну хоть кто-нибудь, как удалить элемент из середины дека(любой элемент, но из середины) как с вершинами работать я знаю(удаление, добавление), но как удалить другой элемент из дека не понимаю.

Вообще исходный код был таким, но потом преподаватель дал доп. задание: удалить из середины элемент, точнее написать такую функцию, которая удаляет его. Я пытаюсь, но ничего не выходит. Вот изначальный код, тут мы удаляли вершины и и добавляли их:
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
#include "dek.h"
#include "iostream"
bool Dek::isEmpty()
{
    return (Top==NULL);
}
int Dek::deleteright()
{
    int vp=DEK_ESE;
    if (!isEmpty()) 
    {
        Node *tmp=Top; //запоминаем указатель на вершину дека
        Node *tmp2=tmp; //запоминаем указатель на начало дека
 
    while (tmp->prev!=NULL) //идём назад, пока не 0
     {
        tmp2=tmp;
        tmp=tmp->prev;
     }
        vp=tmp->key;
        tmp2->prev=NULL;
        delete tmp; // освобождаем память, тем самым удалили вершину
    }
    return vp; // возвращаем значение, которое было в вершине
}
int Dek::deleteleft()
{
    int vp=DEK_ESE;
    if (!isEmpty()) 
    {
        vp=Top->key; //присваиваем значение вершины Тор
        Node* pr=Top->prev; // присваивам рr значение предыдущего элемента
        delete Top; //удаляем вершину
        Top=pr; //pr становится новой вершиной
    }
    return vp;
}
void Dek::addleft (int x)
{
    Node *nd = new Node; //объявляем новую переменную
    nd->key=x; //записываем значение, которое помещается с дек слева
    nd->prev=Top; //связываем новый элемент дека с предыдущим
    Top=nd; //новый элемент дека становится его вершиной
}
void Dek::addright (int x)
{
    Node *nd = new Node;
    nd->key=x;  //записыываем значение, которое помещается в дек справа
    nd->prev=NULL;
    if(Top==NULL) Top=nd;    //то новый элемент дека становится его вершиной
    else
    {
    Node *tmp=Top;  //запоминаем указатель на вершину дека
    while (tmp->prev!=NULL) //идём назад, пока не будет вершина дека
    tmp=tmp->prev;
    tmp->prev=nd; //связываем новый элемент дека с предыдущим
    }
}
Dek CreateDek()
{
    Dek *st=new Dek;
    st->Top=NULL;
    return *st;
}
void Dek::prosmotr()
{
    Node *st=Top;
    while(st!=NULL)
    {
        std::cout<<st->key<<std::endl;
        st=st->prev;
    }
}
void Dek ::deleteall()
{
    Node *st=Top;
    while(st!=NULL)
    {
        st=Top->prev;
        delete Top;
        Top=st;
    }
}
**************************************** **************************************** ************
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#define NULL         0x0000
#define DEK_ESE  -1    // возврат в случае пустоты дека  
//----------------------------------------------------------
struct Node 
{
    int    key;
    Node* prev;
};
 
struct Dek                         // блок управления деком
{
    Node*  Top;                         // вершина дека  
    void addleft(int x);         // добавить x на вершину дека s
    void addright (int x);             
    int deleteleft();
    int deleteright();
    bool isEmpty();    // дек пуст ? 
    void prosmotr();
    void deleteall();
};
 
Dek CreateDek();
**************************************** **************************************** ************
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
#include "dek.h"
#include <iostream>
using namespace std;
 
int main()
     
{
setlocale(LC_ALL, "rus");
    struct Dek ch=CreateDek();
    ch.addright(1);
    ch.addright(2);
    ch.addright(3);
    ch.addright(4);
    ch.addright(5);
    if (ch.isEmpty())
        cout<<" дек пустой "<<endl;
    else
        cout<<" дек не пустой "<<endl<<endl;
 
    ch.prosmotr();
 
 
    cout<<ch.deleteright();
    cout<<ch.deleteright();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2013, 22:13
Ответы с готовыми решениями:

Удаление последнего элемента Дека
Все работает, кроме удаления последнего элемента. Подскажите пожалуйста, что не так? #include &lt;cstdlib&gt; #include &lt;iostream&gt;...

Удаление элемента из середины списка
Приветствую. При написании программы возникла такая проблема. Не могу нормально удалить элемент, который находится в середине списка. У...

Удаление элемента из середины массива(статического)
Хотелось бы узнать как удалить элемент из середины массива(не динамического, не вектора). Не могли бы вы написать простенькую программу для...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2013, 22:13
Помогаю со студенческими работами здесь

Нужно удалить элемент или элементы из середины дека
Помогите плиз. Нужно удалить элемент или элементы из середины дека. как можно это сделать? #include «stdafx.h» #include...

Считывание элементов дека с файла и запись дека в файл
Доброго времени суток. Я написал код программы про дек с ограниченным входом слева (то есть с него можно удалять элементы как с начала,...

Удаление элементов из дека
Помогите плиз. Пишу шаблон дека. Что-то с удалением, совсем никак не выходит. Я так понял в деке надо удалять либо сверху, либо снизу.

Изменение положения элемента в приложении с формами относительно середины другого элемента
Мне нужно, чтобы функция изменяла положение одного PictureBox так чтобы тот становился относительно середины другого PictureBox. Подскажите...

Используя модуль для реализации дека целых чисел, реализовать очередь на базе дека
Уважаемые программисты!Очень нужна Ваша помощь: (помогите решить, разобраться или хотябы просто объяснить алгоритм, с чего начинать, как...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru