#include <iostream>
#include <windows.h>
using namespace std;
class Node
{
public:
char number[100];
Node* next;
Node* last;
};
void russia(const char*);
short action = -1;
Node* head = NULL;
Node* tail = NULL;
Node* lastPtr = NULL;
Node* ptrLast = NULL;
int i,j;
int add()
{
system("CLS");
Node* ptr = new Node;
russia("Введите данные: ");
cin>>ptr->number;
ptr->next = NULL;
if (head == 0)
{
head = ptr;
lastPtr = ptr;
system("CLS");
return 0;;
}
lastPtr->next = ptr;
lastPtr = ptr;
system("CLS");
return 0;;
}
int prosm()
{
{
system("CLS");
Node* ptr = NULL;
if (head == NULL)
{
russia("\t!!! СПИСОК ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
russia("* * * * * СПИСОК * * * * *\n\n");
ptr = head;
while (1)
{
cout<<ptr->number<<" ";
if (ptr->next == 0)
break;
ptr = ptr->next;
}
cout<<"\n\n";
system("PAUSE");
system("CLS");
}
return 0;
}
int delhead()
{
system("CLS");
Node* ptrDelete = NULL;
if (head == NULL)
{
russia("\t!!! СПИСОК ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
if (head->next == NULL)
{
head = NULL;
tail = NULL;
delete head;
}
ptrDelete = head;
head = ptrDelete->next;
head->last = NULL;
delete ptrDelete;
return 0;
}
int deltail()
{
system("CLS");
Node* ptrDelete = NULL;
if (tail == NULL)
{
russia("\t!!! СПИСОК ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
if (tail->last == NULL)
{
head = NULL;
tail = NULL;
delete tail;
}
ptrDelete = tail;
tail = ptrDelete->last;
tail->next = NULL;
ptrLast = tail;
delete ptrDelete;
return 0;
}
int poisk()
{
system("CLS");
Node* ptr = NULL;
char key [50];
if (head == NULL)
{
russia("\t!!! СПИСОК ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
russia("Введите Элемент Для Поиска: ");
cin>>key;
ptr = head;
while (1)
{
if (key == ptr->number)
{
russia("\n\t!!! ЭЛЕМЕНТ НАЙДЕН !!!\n");
break;
}
if (ptr->next == NULL)
{
russia("\n\t!!! ЭЛЕМЕНТ НЕ НАЙДЕН !!!\n");
break;
}
ptr = ptr->next;
}
system("PAUSE");
system("CLS");
return 0;
}
int proverka()
{
Node* ptr = NULL;
system("CLS");
if (head == NULL)
{
russia("\t!!! СПИСОК ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
if (head != NULL)
{
russia("\t!!! СПИСОК НЕ ПУСТ !!!\n\n");
system("PAUSE");
system("CLS");
return 0;
}
return 0;
}
int del()
{return 0;}
void russia(const char* rus)
{
char word[120];
CharToOem(rus, word);
cout<<word;
}
int main()
{
do
{
russia("1. Добавить Элемент\n");
russia("2. Просмотр Списка \n");
russia("3. Удалить Голову\n");
russia("4. Удалить Хвост\n");
russia("5. Поиск Элемента\n");
russia("6. Проверить, пуст ли дек\n");
russia("7. Очистить дек\n");
russia("0. Выход\n\n");
russia("Ваш Выбор: ");
cin>>action;
switch (action)
{
case 1: add(); break;
case 2: prosm(); break;
case 3: delhead(); break;
case 4: deltail(); break;
case 5: poisk(); break;
case 6: proverka(); break;
case 7: del(); break;
case 0: return 0; break;
}
russia("1. Продолжыть роботу\n");
russia("0. Выйти\n");
cin>>action;
system("PAUSE");
system("CLS");
}
while (action!=0);
return 0;
}
Очередь и дек С++
Разработать программу на С++, для реализации основных операций над полу-статичными структурами данных (добавление, удаление) и над их информационными частями-строками (поиск, извлечение, добавление символов и т.д.), на примере очереди и дека, строки - векторы фиксированной длины.
Спасибо огромное!
Выкладывай наработки, задавай конкретные вопросы - будем обсуждать по сути.
Может, пора сменить стиль?
стиль здесь ни при чём. чел просто барыжит потихоньку задания от своих одногруппников.. :D
deque<string> dstr; // пример вставки строк
dstr.push_back("Molekula - H2O, H2 + O = H2O");
dstr.push_front("GPU NVIDIA");
dstr.push_front("GPU ATI Radeon");
deque<string>::iterator iter = dstr.begin(); // пример добавления данных в элементы
while( iter != dstr.end() ) {
int pos = 0;
if((pos = (*iter).find("H2O", 0)) != -1 ) { // поиск, вырезка
printf("sub = %s\n", (*iter).substr(pos, (*iter).length() - pos).c_str());
(*iter).append(" CPU(CISC,RISC, MISC)"); // добавление к строке
break;
}
*iter++;
}
deque<string>::iterator idel = dstr.begin(); // пример удаления по-индексу
idel += 1; // удалить второй элемент из очереди
dstr.erase(idel);
for(size_t c = 0u; c < dstr.size(); c++) // печатаем
printf("out = %s\n", dstr[c].c_str());
dstr.clear();
Тпа этого или хотел со вложенными в очередь структуры типа такого,
deque<vector<string> > - ?
Если так то здесь вообще не понимаю проблем.. :confused:
Цитата:
Может, пора сменить стиль?
стиль здесь ни при чём. чел просто барыжит потихоньку задания от своих одногруппников..
стиль здесь ни при чём. чел просто барыжит потихоньку задания от своих одногруппников..
ребят не выдумывайте..
сори, сразу код не выложил, нэт отрубили на неделю, только решил проблему, вот собственно что с деком получилось:
Код:
почему-то не работает удаление хвоста, и еще не получилось сделать полную очистку дека, помогите это сделать пожалуйста!
и еще вопрос, как можно это реализовать немного проще, без класса?
Цитата: life4fun
Код:
int delhead()
{
...
if (head->next == NULL)
{
[COLOR="red"]head = NULL;[/COLOR]
tail = NULL;
[COLOR="red"]delete head;[/COLOR]
}
...
}
int deltail()
{
...
if (tail->last == NULL)
{
head = NULL;
[COLOR="red"]tail = NULL;[/COLOR]
[COLOR="red"]delete tail;[/COLOR]
}
...
}
{
...
if (head->next == NULL)
{
[COLOR="red"]head = NULL;[/COLOR]
tail = NULL;
[COLOR="red"]delete head;[/COLOR]
}
...
}
int deltail()
{
...
if (tail->last == NULL)
{
head = NULL;
[COLOR="red"]tail = NULL;[/COLOR]
[COLOR="red"]delete tail;[/COLOR]
}
...
}
Цитата: life4fun
и еще вопрос, как можно это реализовать немного проще, без класса?
Дык у тебя по сути и сделано без класса. Набор глобальных функций.
А класс (нормально реализованный) банально удобней.
Вообще, в тырнете полным-полно исходников классов очередей, деков, строк на c++.
ADD:
Тьфу, выделение цветом всё ещё не работает. Но думаю, понятно, что я указал.