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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
05.05.2011, 22:23     Динамические структуры данных.Стек. #1
Доброго времени суток. Нужна помощь в выполнении лабораторной работы
Необходимо создать простую базу данных, которая хранит анкеты для бюро по трудоустройству. Реализовать используя стек, т.е. там 4 поля: имя, специальность, номер анкетки и дата рождения.
Операции, которые выполняет программа:
-вывод на экран;
-добавление в вершину стека;
-удаление из вершины;
-очистка памяти;
-проверка на заполненность/пустоту;
-добавление в конец;
-удаление по ключу(ключ-номер анкеты т.е. вбиваешь номер и удаляется анкета только с тем номером)

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

надеюсь код правильно вставил
Код
#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();

}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2011, 22:23     Динамические структуры данных.Стек.
Посмотрите здесь:

C++ Динамические структуры данных
C++ Динамические структуры данных
C++ Динамические структуры данных
C++ Динамические структуры данных
C++ Динамические структуры. Стек (помогите найти ошибку)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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;
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
07.05.2011, 23:15  [ТС]     Динамические структуры данных.Стек. #3
__UP___

Добавлено через 1 минуту
у меня только указатель на след. элемент *next
но я могу использовать временные
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.05.2011, 08:33     Динамические структуры данных.Стек. #4
prev не в узле, а отдельная переменная, которая следует в цикле за curr
Yandex
Объявления
09.05.2011, 08:33     Динамические структуры данных.Стек.
Ответ Создать тему
Опции темы

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