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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.74
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
#1

Удаление элемента стека - C++

13.11.2010, 08:43. Просмотров 8053. Ответов 9
Метки нет (Все метки)

Всем привет, решал лабу по стекам и столкнулся с одной проблемой, не могу придумать как удалить элемент стека, вот мой код

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
115
116
117
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include <cstring.h>
#include <cstdlib.h>
 
const int n=10;
 
struct record
{
    char name[20];
    char capitol[20];
    double population;
} country[n] ;
 
//--------------------------------
void enter();
void show();
void search();
void del();
void input (int i);
//--------------------------------
void main()
{
 int l;
 do
  {
     cout <<"\n 1)Enter \n 2)Show \n 3)Search \n 4)Delete \n 5)Exit \n ";
     cin >> l;
     switch(l)
      {
          case 1:
             enter();
             break;
          case 2:
             show();
             break;
          case 3:
             search();
             break;
          case 4:
            /* del();  */
             break;
      }
  }
  while(l!=5);
  getch();
}
 
//------------------------------------------------------
void enter ()
{
        int i;
        for(i = 0; i < n; i++)
                if(!*country[i].name) break;
        if(i == n)
        {
                cout << "List is full\n";
                return;
        }
 
        input(i);
}
//----------------------------------------------------------------
void input (int i)
{
        cout << "Enter name of the country: ";
        cin >> country[i].name;
 
        cout << "Enter capitol of the country: ";
        cin >> country[i].capitol;
       /*   fout << "\n Name of the capitol is: " << country[i].capitol;  */
 
        cout << "Enter population of the country: ";
        cin >> country[i].population;
   /*       fout << "\n Population: " << country[i].population;    */
}
//---------------------------------------------------------------------
void show ()
{
        int t;
 
        for(t = 0; t < n; t++)
        {
                if(*country[t].name)
                {
                        cout << "\n Name of the country: " << country[t].name;
                        cout << "\n Name of the capitol is: " << country[t].capitol;
                        cout << "\n Population: " << country[t].population;
                }
        }
}
//-----------------------------------------------------------------
void search ()
{
        int i;
        char name [20];
 
        cout << "Enter name of the country: ";
        cin >> name;
 
        for(i = 0; i < n; i++)
 
                if(!strcmp (name, country[i].name))
                   break;
                        if(i == n)
                           {
                            cout << "\n Failed \n";
                            return;
                           }
                       {
                          cout << "\n Name of the country: " << country[i].name;
                          cout << "\n Name of the capitol is: " << country[i].capitol;
                          cout << "\n Population: " << country[i].population;
                       }
}
//------------------------------------------------------------------------
в универе посоветовали делать так: перезаписывать файл с нужным элементом, находить ненужный, и записывать файл уже без него, как я примерно себе представляю нужно найти ненужный элемент, сместить указатель, и записать стек в файл, но что-то не могу это реализовать, буду благодарен за помощь! =)

Добавлено через 22 часа 42 минуты
что ребят неужели никто помочь не может? поиск перерыл, и сам голову сломал уже
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2010, 08:43     Удаление элемента стека
Посмотрите здесь:

Удаление последнего введенного элемента из списка (стека) C++
C++ Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
C++ Удаление элемента из списка и поиск элемента
Стеки и удаление конкретного элемента из стека C++
C++ Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
C++ Определить, сколько элементов стека, начиная от вершины, находится до элемента с минимальным значением
Сформировать непустой список L по принцепу стека. Удалить из списка L все вхождения элемента E C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:11  [ТС]     Удаление элемента стека #2
апну темку , может кто поможет
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.11.2010, 10:34     Удаление элемента стека #3
Что-то я у Вас стека не нахожу.
Держите вот пример алгоритма на стеке из STL.

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
#include <stack>
#include <vector>
#include <iostream>
 
// Для простоты примера стек содержит целочисленные переменные
// А в качестве промежуточного буфера используется не файл, а vector
 
int main()
{
        std::stack<int> s;
 
        // Заполнение стека числами от 0 до 9
        for(int i = 0; i < 10; ++i)
                s.push(i);
 
        // Допустим в стеке должны остаться все числа, кроме 5
        // Соответственно необходимо удалить элемент со значением 5
        std::vector<int> v;
        while(!s.empty())
        {
                if(s.top() != 5)                // Это ключевой момент, в стек помещаются
                        v.push_back(s.top());   // все элементы не равные 5
 
                s.pop();
        }
 
        // Теперь стек пустой, а вектор содержит все значения стека, кроме 5.
        // При этом первый элемент вектора содержит число 9.
        // Чтобы сохранить исходную последовательность в стеке
        // необходимо помещать элементы в стек, начиная с конца вектора.
        for(int i = v.size() - 1; i >= 0; --i)
                s.push(v[i]);
 
        // Для проверки выведем стек на экран
        while(!s.empty()) {
                std::cout << s.top() << ' ';
                s.pop();
        }
 
        return 0;
}
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 10:37     Удаление элемента стека #4
Цитата Сообщение от bLesk
не могу придумать как удалить элемент стека
удаление элемента из этого стека делается через поиск первого !*country[i].name и *country[i - 1].name = '\0' если i > 0

где там файл

всё правильно, не хватает только функции снятия и show показывает слева-направо, а надо справа-налево
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.11.2010, 10:43     Удаление элемента стека #5
Вообще, если надо что-то удалять из стека, то следует задуматься - нужен ли стек вообще для этой задачи.
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:48  [ТС]     Удаление элемента стека #6
Цитата Сообщение от fasked Посмотреть сообщение
Вообще, если надо что-то удалять из стека, то следует задуматься - нужен ли стек вообще для этой задачи.
именно по условию лабы, мне нужно работать со стеком

1. Создать запись Страна следующей структуры: Название, столица, количество населения. Написать программу, реализующую следующее меню:
• добавить элемент в файл
• удалить элемент из файла
• принадлежность элемента файлу
• вывод всех записей на экран
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 10:49     Удаление элемента стека #7
В стеке нет операции удаления.
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:50  [ТС]     Удаление элемента стека #8
Спасибо вам большое, буду разбираться! =) "мысля пошла"
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
18.11.2010, 19:51  [ТС]     Удаление элемента стека #9
всем привет еще раз, заставил таки себя опять сесть за эту лабу, сделал практически все, но когда начал организовывать вывод результатов в файл столкнулся с одной проблемкой, программа записывает мне в файл только последний элемент из тех, что я вводил, я думаю что это изза того, что программа "очищает" файл перед внесением нового элемента, только что именно я сделал не так так догнать и не смог

надеюсь хелпанете мужики =)

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
void enter ()
{
        ofstream out;
        out.open("C:/результат.txt");
        int i;
        for(i = 0; i < n; i++)
                if(!*country[i].name) break;
        if(i == n)
        {
                cout << "List is full\n";
                return;
        }
 
        cout << "Enter name of the country: ";
        cin >> country[i].name;
        out << "\n Name of the country:  "<< country[i].name;
 
        cout << "Enter capitol of the country: ";
        cin >> country[i].capitol;
        out << "\n Capitol of the country:  "<< country[i].capitol;
 
        cout << "Enter population of the country: ";
        cin >> country[i].population;
        out << "\n Population of the country:  "<< country[i].population;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 01:09     Удаление элемента стека
Еще ссылки по теме:

Удаление элементов из стека C++
C++ Удаление элемента стека не работает
Сделать добавление элемента в массив и удаление элемента из массива используя STL C++
C++ Удаление из стека отрицательных элементов
Реализация списка.Удаление хвостового элемента.Поиск элемента C++

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

Или воспользуйтесь поиском по форуму:
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.11.2010, 01:09     Удаление элемента стека #10
C++
1
out.open("C:/результат.txt", ios::app);
Yandex
Объявления
19.11.2010, 01:09     Удаление элемента стека
Ответ Создать тему
Опции темы

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