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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
#1

Динамические структуры данных.Стек. - C++

05.05.2011, 22:23. Просмотров 2822. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Нужна помощь в выполнении лабораторной работы
Необходимо создать простую базу данных, которая хранит анкеты для бюро по трудоустройству. Реализовать используя стек, т.е. там 4 поля: имя, специальность, номер анкетки и дата рождения.
Операции, которые выполняет программа:
-вывод на экран;
-добавление в вершину стека;
-удаление из вершины;
-очистка памяти;
-проверка на заполненность/пустоту;
-добавление в конец;
-удаление по ключу(ключ-номер анкеты т.е. вбиваешь номер и удаляется анкета только с тем номером)

у меня проблема с последними 2-мя операциями-не могу написать написать функцию поиска для удаления по ключу. прошу помощи, заранее спасибо

надеюсь код правильно вставил
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
 
using namespace std;
const int N=100;
struct worker {
    char name[N];
    char spec[N];
    int numb;
    char date[N];
};
 
struct STACK {
    worker info;
    STACK *next;
};
 
 
 
int Empty(STACK *stack)
{
    if (stack==NULL)
        return 0;
    else 
        return 1;
}
void Add(STACK **stack, worker d)
{
    STACK *tmp = new STACK;
    tmp->info=d;
    tmp->next=*stack;
    *stack=tmp;
 
}
void Del(STACK **stack)
{
    STACK *tmp=*stack;
    *stack=(*stack)->next;
    delete tmp;
}
 
void Show(STACK *stack)
{
    STACK *tmp=stack;
    while(tmp!=NULL)
    {
        cout << "Имя: "<< tmp->info.name << endl;
        cout << "Специальность: "<< tmp->info.spec << endl;
        cout << "Номер анкеты: "<< tmp->info.numb << endl;
        cout << "Дата заполнения: "<< tmp->info.date << endl << endl;
        tmp=tmp->next;
    }
}
 
void ClearAll(STACK **stack)
{
    STACK *tmp;
    while(*stack!=NULL)
    {
        tmp=*stack;
        *stack=(*stack)->next;
        delete tmp;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    STACK *stack=NULL;
    int num,Key;
    STACK info;
    worker d;
    char otv;
 
    do
    {
        cout << endl <<"1. Добавление элементов в вершину стека" << endl 
            << "2. Удаление элемента из вершины стека" << endl
            << "3. Вывод элементов" << endl 
            << "4. Удаление по ключу" << endl
            << "0. Выход" << endl;
        cout << "Ваш выбор: ";
        cin >> otv;
        switch(otv)
        {
        case '1':
            cout << "Введите имя" << endl;
            cin >> d.name;
            cout << "Введите специальность" << endl;
            cin >> d.spec;
            cout << "Введите номер анкеты" << endl;
            cin >> d.numb;
            cout << "Введите дату заполнения" << endl;
            cin >> d.date;
            Add(&stack,d);
            cout << endl << "Элементы добавлены" << endl;
            cout << endl << "Элементы стека:" << endl << endl;
            Show(stack);
            break;
        case '2':
            if (Empty(stack)==0)
                cout << endl << "Стек пуст" << endl;
            else
            {
                Del(&stack);
                cout << endl << "Элемент удален из вершины стека" << endl;
                cout << endl << "Элементы стека:" << endl << endl;
                Show(stack);
            }
            break;
        case '3':
            if (Empty(stack)==0)
                cout << endl << "Стек пуст" << endl;
            else
            {
                cout << endl << "Элементы стека:" << endl;
                Show(stack);
                cout << endl;
            }
            break;
        case '0':
            ClearAll(&stack);
            break;
        default:
            cout << endl << "Ошибка" << endl;
            break;
        }
 
    }while(otv!='0');
    cin.get();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2011, 22:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамические структуры данных.Стек. (C++):

Динамические структуры данных.Стек. Значение выражения в постфиксной форме - C++
Пусть строка символов, введенная с клавиатуры, задает выражение, записанное в постфиксной форме (например, 6523+8*+3+*). В выражении...

Динамические структуры. Стек (помогите найти ошибку) - C++
помогите найти ошибку. Есть задание: построить стек, элементами которого являются слова текста,которые считываются из текстового файла....

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Структуры данных(СТЕК) - C++
Помогите написать, или исправьте, плиз, мою программку. Здесь - стек. надо создать меню, где можно вывести, создать и удалить элемент со...

Динамические структуры данных - C++
Выполнить задания 3 способами: с использованием стека, очереди, дека. Описание соответствующих типов и набор всех необходимых для их...

Динамические структуры данных - C++
(можно с пояснением,что-то не понимаю) Есть строка символов, признаком конца которой является ;. В строке могут быть фигурные, круглые,...

3
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
06.05.2011, 04:07 #2
C++
1
int DelKey(STACK **stack, int numb);
если анкета удалена, возвратить 1, иначе 0
создаёшь цикл, который проходит по всем элементам
в цикле проводится сравнение numb и curr->numb
если они равны, перецепить следующий элемент на место текущего
текущий освободить

чтобы знать, куда перецеплять, нужен дополнительный указатель prev, который будет хранить адрес предыдущего элемента
он в цикле как бы преследует curr

получится
C++
1
2
    prev->next = curr->next;
    del curr;
1
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
07.05.2011, 23:15  [ТС] #3
__UP___

Добавлено через 1 минуту
у меня только указатель на след. элемент *next
но я могу использовать временные
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
09.05.2011, 08:33 #4
prev не в узле, а отдельная переменная, которая следует в цикле за curr
1
09.05.2011, 08:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 08:33
Привет! Вот еще темы с ответами:

Динамические структуры данных - C++
Здравствуйте. Есть такой код в таких файлах: Основной .cpp-файл программы#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

Задача на динамические структуры данных - C++
Прошу помочь с выполнением задания. Дан одномерный динамический массив А, размер которого вводится и заранее неизвестен. Сформировать...

Динамические структуры данных о квартирах - C++
нужно помочь дорешать совсем запутался Задание: Определите алгоритм решения задачи (в словесной или графической форме); Создайте...

Динамические структуры данных. Списки - C++
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово. Определить, является ли оно...


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

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

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