Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/97: Рейтинг темы: голосов - 97, средняя оценка - 4.84
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
1

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

13.11.2010, 08:43. Показов 18768. Ответов 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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2010, 08:43
Ответы с готовыми решениями:

Удаление элемента стека
Здравствуйте! Столкнулся с проблемой удаления элемента стека по определённому номеру,элемент...

Удаление элемента из стека
Здравствуйте! Объясните, каким образом можно удалить любой элемент в стеке? Пока что могу только...

Удаление максимального элемента со стека
Здравствуйте! нужна помощь с удалением максимального(самого большого) элемента со стека. функция...

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

9
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:11  [ТС] 2
апну темку , может кто поможет
0
Эксперт С++
5026 / 2605 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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
4855 / 3276 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
15.11.2010, 10:37 4
Цитата Сообщение от bLesk
не могу придумать как удалить элемент стека
удаление элемента из этого стека делается через поиск первого !*country[i].name и *country[i - 1].name = '\0' если i > 0

где там файл

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

1. Создать запись Страна следующей структуры: Название, столица, количество населения. Написать программу, реализующую следующее меню:
• добавить элемент в файл
• удалить элемент из файла
• принадлежность элемента файлу
• вывод всех записей на экран
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
15.11.2010, 10:49 7
В стеке нет операции удаления.
0
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
15.11.2010, 10:50  [ТС] 8
Спасибо вам большое, буду разбираться! =) "мысля пошла"
0
42 / 42 / 8
Регистрация: 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
4855 / 3276 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
19.11.2010, 01:09 10
C++
1
out.open("C:/результат.txt", ios::app);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2010, 01:09

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

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

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

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


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

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

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