Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2017, 21:14   #1
zagadkatata
Новичок
Джуниор
 
Регистрация: 27.11.2017
Сообщений: 1
По умолчанию Проверить, является ли введенная последовательность символов симметричной - C++

Проверить, является ли введенная последовательность символов симметричной трёмя способами: используя стек, очередь и дек. Помогите пожалуйста. Прога не робит
Код:
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
 
/*НАША СТРУКТУРА*/
struct List
{
    char x; //информационный элемент
    List *Next, *Head; //Голова стека и указатель на следующий элемент
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК */
void Add(char x, List *&MyList) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
    List *temp = new List; //Выделяем память для нового элемента
    temp->x = x; //Записываем в поле x принимаемый в функцию элемент x
    temp->Next = MyList->Head; //Указываем, что следующий элемент это предыдущий
    MyList->Head = temp; //Сдвигаем голову на позицию вперед
}
 /*Функция удаления элемента из стека*/
int pop(List* &MyList)
{
    char temp1 = MyList->x; // извлекаем в переменную temp значение в вершине стека
    List *temp = MyList; // запоминаем указатель на вершину стека, чтобы затем
                         // освободить выделенную под него память
    MyList = MyList->Next; // вершиной становится предшествующий top элемент
    delete temp; // освобождаем память, тем самым удалили вершину
    std::cout << temp1; //Вывод текущего элемента на экран
    return temp1; // возвращаем значение, которое было в вершине
}
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ СТЕКА*/
void Show(List *MyList) //Нужен только сам стек
{
    List *temp = MyList->Head; //Объявляем указатель и Указываем ему, что его позиция в голове стека
                               //с помощью цикла проходим по всему стеку
    while (temp != NULL) //выходим при встрече с пустым полем
    {
        cout << temp->x << " "; //Выводим на экран элемент стека
        temp = temp->Next; //Переходим к следующему элементу
    }
}
 
/*ФУНКЦИЯ УДАЛЕНИЯ СТЕКА ИЗ ПАМЯТИ*/
void ClearList(List *MyList)
{
    while (MyList->Head != NULL) //Пока по адресу не пусто
    {
        List *temp = MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
        delete MyList->Head; //Освобождаем адрес обозначающий начало
        MyList->Head = temp; //Меняем адрес на следующий
    }
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(0, "");
    List *MyList = new List; //Выделяем память для стека
    MyList->Head = NULL; //Во избежание ошибок инициализируем первый элемент
    setlocale(0, "");
    int n;
    char *str;
    cout << "Введите приблизительную длину строки" << endl;
    cin >> n;
    n = n + 1;
    str = new char[n];
    cout << "Enter string: ";
    cin.get();
    cin.get(str, n);
    for (int i = 0; i<strlen(str); i++) Add(str[i], MyList); //Заносим данные в стек
    Show(MyList); //Выводим стек на экран
    cout << endl;
    for (int i = 0; i < strlen(str); i++, pop(MyList))
    {
        if (str[i] != MyList->Head())
        {
            cout << "NO. \n";
            break;
        }
        if (i == strlen(str) - 1 && str[i] == MyList->Head) {
            cout << "YES. \n";
        }
    }
    ClearList(MyList); //Очищаем память.
    delete MyList->Head;
    delete MyList;
    system("pause");
    return 0;
}

Последний раз редактировалось zagadkatata; 27.11.2017 в 21:16.
zagadkatata вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер: Задана последовательность из 10 чисел. Проверить является ли вторая половина последовательности зеркальным отражением первой Руслан97 Помощь студентам 0 22.12.2016 08:02
Паскаль: является ли введенная с клавиатуры последовательность символов записью двоичного или шестнадцатеричного числа Студент ММИ Помощь студентам 12 14.11.2014 14:22
Строки - Проверить, является ли эта последовательность правильным скобочным выражением Катерина Рыжая Помощь студентам 6 11.12.2012 12:43
последовательность символов является идентификатором [Паскаль] Алекс74 Помощь студентам 3 16.12.2010 13:27
Проверить, является ли заданная строка симметричной. - Ассемблер VHomer Помощь студентам 3 27.12.2008 19:37