С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

13.11.2010, 08:43. Просмотров 9510. Ответов 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 минуты
что ребят неужели никто помочь не может? поиск перерыл, и сам голову сломал уже
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2010, 08:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элемента стека (C++):

Удаление элемента стека не работает - C++
Здравствуйте, у меня проблема с обработкой стека. Нужно ввести в стек числа и из полученного стека удалить отрицательные элементы. Вроде...

Стеки и удаление конкретного элемента из стека - C++
Здравствуйте, уважаемые программисты и начинающие как я. Помогите, пожалуйста с одной функцией. В общем задача такова: Имеется два списка...

Удаление последнего введенного элемента из списка (стека) - C++
Напишите пожалуйста программу для удаления последнего введенного элемента из списка (стеку)

Функция remove: удаление всех включений элемента x из стека - C++
реализуйте функцию remove которая удаляет все включения элемента x из стека

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

Удаление элементов из стека - C++
Задание: 10. В созданном списке определить количество элементов, имеющих значения, меньше среднего значения от всех элементов, и удалить...

9
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:11  [ТС] #2
апну темку , может кто поможет
0
fasked
Эксперт С++
4952 / 2532 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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;
}
1
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
15.11.2010, 10:37 #4
Цитата Сообщение от bLesk
не могу придумать как удалить элемент стека
удаление элемента из этого стека делается через поиск первого !*country[i].name и *country[i - 1].name = '\0' если i > 0

где там файл

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

1. Создать запись Страна следующей структуры: Название, столица, количество населения. Написать программу, реализующую следующее меню:
• добавить элемент в файл
• удалить элемент из файла
• принадлежность элемента файлу
• вывод всех записей на экран
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
15.11.2010, 10:49 #7
В стеке нет операции удаления.
0
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:50  [ТС] #8
Спасибо вам большое, буду разбираться! =) "мысля пошла"
0
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;
 
}
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
19.11.2010, 01:09 #10
C++
1
out.open("C:/результат.txt", ios::app);
1
19.11.2010, 01:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 01:09
Привет! Вот еще темы с ответами:

Удаление элементов из стека - C++
Удалить из созданного списка(стек) отрицательные элементы.

Удаление элементов из стека - C++
Здравствуйте. Посмотрите, пожалуйста мой код. Это не совсем обычная реализация стэка. И может быть не совсем логичная, но она работает, за...

Удаление из стека отрицательных элементов - C++
Здравствуйте,необходима помощь со стеками.нужно создать стек и удалить из него отрицательные елементы.программу написал но как удалить...

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


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

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

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