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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Тест по ООП http://www.cyberforum.ru/cpp-beginners/thread909082.html
Помогите, пожалуйста, с текстом по С++!!! Тема 13. Создание объектов класса 13.1 Пусть описан класс class ClassA {int a; public: ClassA(); ClassA(int ); }; Какое из следующих выражений противоречит синтаксису С++ a) ClassA В; b) ClassA B=ClassA(2); c) ClassA B(2); d) ClassA В();
C++ Создание простой игры, каким образом распределить "обязанности" В общем идея такая, на данный момент есть более-менее работающий прототип (звёздочками в консоли) "битвы алгоритмов": поочерёдно вызываются программы-игроки, делающие ход на игровом поле и.т.д. На данный момент я вижу идею так: физический движок (из-за неграмотности в подобных делах, простите за грубые названия) осуществляет, собственно говоря, весь этот процесс вызова игроков, просчитывания и... http://www.cyberforum.ru/cpp-beginners/thread909077.html
C++ Разборка кода
Ребят, помогите описать код, что какая функция делает #include <stdio.h> #include <conio.h> #include <stdlib.h> typedef struct A { struct A *next; char surname, name, thirdname, sex; int age; } element;
C++ Попадание точки в заданную область
Дана точка на плоскости с координатами (x,y).Составить программу, которая выдает одно из сообщений <<Да>>,<<Нет>>,<<На границе>> в зависимости от того , лежит ли точка внутри заштрихованной области , вне заштрихованной области или на ее границе. Области задаются графически следующим образом: @Naril, обращаю ваше внимание на правила форума: заголовок должен отражать суть задания
C++ Класс Квадратная матрица. Методы: сложение с матрицей, транспонирование, вывод элементов http://www.cyberforum.ru/cpp-beginners/thread909069.html
Класс «Квадратная матрица». Методы: сложение с матрицей, транспониро-вание, вывод элементов матрицы на дисплей. А следующая программа, использовать код программы которую надо сделать выше, но сделать перегрузку операторов
C++ Выделение памяти под массив объектов без вызова конструктора Добрый вечер. Насколько я знаю, при выделении памяти под массив объектов, для каждого из них вызывается конструктор. Можно ли сперва выделить память, а затем инициализировать объекты? Нашел следующий код, но не совсем понимаю, как он вообще работает STACK* s = (STACK*)operator new (sizeof STACK* MAX); //выделяем память под массив объектов размером MAX new (&s ) STACK (InitNumber,... подробнее

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

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

21.06.2013, 22:13. Просмотров 807. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru