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

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

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

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

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

C++ удаление элемента
Считывание элементов дека с файла и запись дека в файл C++
Удаление элемента C++
Удаление элемента из вектора C++
C++ Удаление элемента из середины списка
Удаление элемента структуры C++
C++ Удаление элемента в списке
C++ Нужно удалить элемент или элементы из середины дека
C++ Ошибка при добавлении элемента в конец дека
C++ Удаление последнего элемента Дека
C++ Создание дека
Переполнение дека C++

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

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

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