Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /*ОБЪЯВЛЕНИЕ СТРУКТУРЫ*/
- struct Queue { int x; //информационный элемент
- Queue *Next, *Head, *Tail; //Голова очереди и указатель на следующий элемент
- };
- /*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В очередь */
- void Push(int x, Queue *&MyQueue){
- //Принимаем элемент очереди и указатель на очередь, при этом говорим, что принимаемый указатель будет сам по себе указателем
- Queue *element = new Queue; //Выделяем память для нового элемента
- element->x = x; //Записываем в поле x принимаемый в функцию элемент x
- element->Next = NULL;
- if (MyQueue->Head == NULL)
- MyQueue->Head = MyQueue->Tail = element;
- else{
- //Сдвигаем хвост на позицию вперед
- (MyQueue->Tail)->Next = element;
- MyQueue->Tail = element;
- }
- }
- /*ФУНКЦИЯ ОТОБРАЖЕНИЯ очереди*/
- void Show(Queue *MyQueue){ //Нужна только сама очередь
- Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
- //с помощью цикла проходим по всему стеку
- while (temp != NULL){ //выходим при встрече с пустым полем
- cout << temp->x << " "; //Выводим на экран элемент очереди
- temp = temp->Next; //Переходим к следующему элементу
- }
- cout << endl;
- }
- /*ФУНКЦИЯ УДАЛЕНИЯ ОЧЕРЕДИ ИЗ ПАМЯТИ*/
- void ClearQueue(Queue *MyQueue){
- while (MyQueue->Head != NULL){ //Пока по адресу не пусто
- Queue *temp = MyQueue->Head->Next; //Временная переменная для хранения адреса следующего элемента
- delete MyQueue->Head; //Освобождаем адрес обозначающий начало
- MyQueue->Head = temp; //Меняем адрес на следующий
- }
- }
- /*ФУНКЦИЯ УБАВЛЕНИЯ ЭЛЕМЕНТА ИЗ очереди */
- void Pop(Queue *MyQueue){
- if (MyQueue->Head != NULL){ //Пока по адресу не пусто
- Queue *temp = MyQueue->Head->Next; //Временная переменная для хранения адреса следующего элемента
- MyQueue->Head = temp; //Меняем адрес на следующий
- }
- }
- /*ЗАПОЛНЕНИЕ ИЗ ЦИКЛА*/
- void CreateQueue(Queue *MyQueue){
- MyQueue->Head = NULL; //Во избежание ошибок инициализируем первый элемент
- for (int i = -2; i<10; i++)
- Push(i, MyQueue); //Заносим данные в очередь
- }
- /*УДАЛЕНИЕ ЭЛЕМЕНТОВ"*/
- void DeleteNegative(Queue *MyQueue){
- int count=0;
- Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
- //с помощью цикла проходим по всему стеку
- while (temp != NULL){
- count++;
- temp = temp->Next;
- }
- temp = MyQueue->Head;
- for (int j = 0; j < count; j++){
- if (temp->x < 0){
- Pop(MyQueue);
- temp = temp->Next;//Переходим к следующему элементу
- }
- else{
- Push(temp->x, MyQueue); // сдвижение!!!!
- Pop(MyQueue);
- temp = temp->Next; //Переходим к следующему элементу
- }
- }
- }
- /*ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ*/
- void AddNegative (Queue *MyQueue) {
- // да то же самое. только push
- }
- /*ПРОВЕРКА НА ПУСТОТУ*/
- void Checkman(Queue *MyQueue){
- // Пробегаемся по всей строке и проверяем есть ли смысл в жизни? Если нет, выводим 42.
- }
- int main(){
- Queue *MyQueue = new Queue; //Выделяем память для очереди
- CreateQueue(MyQueue); //Инициализируем очередь
- cout << "Создали список" << endl;
- Show(MyQueue); //Выводим очередь на экран
- DeleteNegative(MyQueue);
- cout << "Удалили элемент" << endl; // вопросик: удалять по индексу, или по значению?
- Show(MyQueue);
- AddNegative(MyQueue);
- cout << "Добавили элемент" << endl;
- Show(MyQueue);
- ClearQueue(MyQueue); //Очищаем память.
- delete MyQueue->Head;
- delete MyQueue;
- cout << "Память очищена" << endl;
- }
- // Next uno Pred, и дело в шляпе
Add Comment
Please, Sign In to add comment