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

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

Войти
Регистрация
Восстановить пароль
 
ALexeyg88
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 11
#1

удаление элемента из ДЕКА (из середины) - C++

21.06.2013, 22:13. Просмотров 889. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удаление элемента из ДЕКА (из середины) (C++):

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

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

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

Нужно удалить элемент или элементы из середины дека - C++
Помогите плиз. Нужно удалить элемент или элементы из середины дека. как можно это сделать? #include «stdafx.h» #include &lt;iostream&gt; ...

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

Ошибка при добавлении элемента в конец дека - C++
2 игрока берут из своих колод по 1-й карте. Т.е. достают элемент дека из начала дека. В данном случае пока неважно сколько раз это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 22:13
Привет! Вот еще темы с ответами:

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

Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств ) - C++
Описать класс «множество», позволяющий выполнять основные операции – добавление и удаление элемента, пересечение, объединение и удаление...

Сделать добавление элемента в массив и удаление элемента из массива используя STL - C++
Всем привет. Помогите пожалуйста написать. Нужно использовать STL. Необходимо сделать добавление элемента в массив и удаление элемента из...

Реализация списка.Удаление хвостового элемента.Поиск элемента - C++
Всем привет,мое задание выглядит так : В класс List&lt;T&gt; из классной работы добавить следующие методы: void addHead(T...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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