0 / 0 / 0
Регистрация: 11.05.2018
Сообщений: 11
1

Баланс скобок (без использования библиотеки стека)

16.05.2018, 23:17. Показов 3153. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С использование стека
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
#include <iostream>
#include <stack>
#include <Windows.h>
using namespace std;
int main()
{SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
     stack<char>s;
string a;
cout<<"Введите скобки:";
cin>>a;
int n=a.length();bool b=true;
for (int i=0;i<n;i++)
{
    if (a[i]=='('|| a[i]=='[' || a[i]=='{')s.push((a[i]));
    if (a[i]==')' && !s.empty() && s.top()=='(')s.pop();
    else if (a[i]==')' && s.empty()) b=false;
    if (a[i]==']' && !s.empty() && s.top()=='[')s.pop();
    else if (a[i]==']' && s.empty()) b=false;
    if (a[i]=='}' && !s.empty() && s.top()=='{')s.pop();
    else if (a[i]=='}' && s.empty()) b=false;
}
cout<<"Баланс есть?"<<" ";
if (s.empty()&&b==true)
    cout<<"Yes"<<endl;
else
    cout << "No" << endl;
    return 0;
}
Нужно реализовать эту программу без использования библиотеки стека,в которой будут иметься функции pop,push,top.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2018, 23:17
Ответы с готовыми решениями:

Создание стека без использования классов
На первом шаге нужно создать стек включением в него k целых чисел в возрастающей...

Дана строка. Посчитать баланс скобок ([{ . Баланс открытых к закрытым
Прошу помощи. String S1 = textBox1.Text.ToLower(); for (int i = 0; i &lt; S1.Length; i++) { ...

Проверить правильность расстановки в строке скобок (баланс открывающих и закрывающих скобок)
помогите с решением задачи. Запросить у пользователя ввод значений согласно варианту. Выполнить...

Вывод числа на экран без использования стека
Помогите пожалуйста в этом тексте программы сделать вывод числа на экран без использования стека. ...

5
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
16.05.2018, 23:19 2
Сделай с помощью std::vector
0
0 / 0 / 0
Регистрация: 11.05.2018
Сообщений: 11
16.05.2018, 23:27  [ТС] 3
мне именно нужно cамому написать функции pop,push,top.Которые можно будет использовать в этой программе, если я отрублю библиотеку стека.
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
17.05.2018, 00:21 4
Qwesto, ну так создай свой стек, в чем проблема?
Работа с односвязными кольцевыми списками
Вместо int value -> char и вперед.
0
10 / 9 / 8
Регистрация: 24.03.2017
Сообщений: 37
17.05.2018, 02:27 5
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
134
135
136
137
#include <iostream>
 
using namespace std;
//главная функция
struct Single_List {
    int Data;
    Single_List* Next;
};
 
struct Stack {
    Single_List *Top;//вершина стека
};
Stack *Top_Stack;//указатель на вершину стека
                 //удаление элемента с заданным номером из однонаправленного списка
Single_List* Delete_Item_Single_List(Single_List* Head,
    int Number) {
    Single_List *ptr;//вспомогательный указатель
    Single_List *Current = Head;
    for (int i = 1; i < Number && Current != NULL; i++)
        Current = Current->Next;
    if (Current != NULL) {//проверка на корректность
        if (Current == Head) {//удаляем первый элемент
            Head = Head->Next;
            delete(Current);
            Current = Head;
        }
        else {//удаляем непервый элемент
            ptr = Head;
            while (ptr->Next != Current)
                ptr = ptr->Next;
            ptr->Next = Current->Next;
            delete(Current);
            Current = ptr;
        }
    }
    return Head;
}
bool Empty_Single_List(Single_List* Head) {
    return (Head != NULL ? false : true);
}
 
bool Empty_Stack(Stack* Top_Stack) {
    return Empty_Single_List(Top_Stack->Top);
}
//освобождение памяти, выделенной под однонаправленный список
void Delete_Single_List(Single_List* Head) {
    if (Head != NULL) {
        Delete_Single_List(Head->Next);
        delete Head;
    }
}
//вставка элемента с заданным номером в однонаправленный список
Single_List* Insert_Item_Single_List(Single_List* Head,
    int Number, int DataItem) {
    Number--;
    Single_List *NewItem = new(Single_List);
    NewItem->Data = DataItem;
    NewItem->Next = NULL;
    if (Head == NULL) {//список пуст
        Head = NewItem;//создаем первый элемент списка
    }
    else {//список не пуст
        Single_List *Current = Head;
        for (int i = 1; i < Number && Current->Next != NULL; i++)
            Current = Current->Next;
        if (Number == 0) {
            //вставляем новый элемент на первое место
            NewItem->Next = Head;
            Head = NewItem;
        }
        else {//вставляем новый элемент на непервое место
            if (Current->Next != NULL)
                NewItem->Next = Current->Next;
            Current->Next = NewItem;
        }
    }
    return Head;
}
 
//очистка стека
void Clear_Stack(Stack* Top_Stack) {
    Delete_Single_List(Top_Stack->Top);
}
//извлечение элемента из вершины стека
int Pop_Stack(Stack* Top_Stack) {
    int NewElem = NULL;
    if (Top_Stack->Top != NULL) {
        NewElem = Top_Stack->Top->Data;
        Top_Stack->Top = Delete_Item_Single_List(Top_Stack->Top, 0);
        //удаляем вершину
    }
    return NewElem;
}
//добавление элемента в вершину стека
void Push_Stack(int NewElem, Stack* Top_Stack) {
    Top_Stack->Top = Insert_Item_Single_List(Top_Stack->Top, 1, NewElem);
}
 
//функция проверки правильности расстановки скобок
void Check_Brackets(char *text) {
    int i;
    int flag = 1;
    Stack *Top_Stack;
    Top_Stack = new Stack();
    for (i = 0; i<strlen(text); i++) {
        if (text[i] == ')') {
            if (Empty_Stack(Top_Stack)) {
                //Попытка удалить нулевой элемент стека 
                flag = 0;
                break;
            }
            if (Top_Stack->Top->Data == '(')
                Pop_Stack(Top_Stack);
            else {
                flag = 0;
                break;
            }
        }
        if (text[i] == '(')
            Push_Stack(text[i], Top_Stack);
    }
    if (flag != 0 && Empty_Stack(Top_Stack))
        printf("Верно!");
    else printf("Неверно!");
    Clear_Stack(Top_Stack);
    printf("\n");
}
 
int main() {
    setlocale(0, "");
    char text[255];
    printf("Введите текст, содержащий \"(\" и \")\" \n");
    gets_s(text);
    Check_Brackets(text);
    system("pause");
    return 0;
}
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.05.2018, 11:12 6
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
bool opn(char c) { return c=='(' || c=='[' || c=='{'; }
 
bool isp(char l, char r) { return l=='(' && r==')' || l=='[' && r==']' || l=='{' && r=='}'; }
 
bool f(int i, char a) {
    char b; return (!(cin>>b)) ? i==0 : (opn(b)) ? f(i+1, b) && f(i, a) : isp(a, b); }
 
int main() { cout << (f(0, ' ') ? "yes" : "no"); }
0
17.05.2018, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 11:12
Помогаю со студенческими работами здесь

Задача со строками без использования библиотеки string.h
Дана непустая строка S. Вывести на экран Эту же строку S, но с пробелами между символами.

Переделать программу без использования библиотеки <vector>
Доброго времени. Программа не моя, но немного переделанная, нашел её здесь. Хотелось бы её увидеть...

Подключение библиотеки к проекту без использования сборщиков
Всем привет. Есть необходимость подключить jar библиотеку в проект, независимо от ее...

Переписать функцию без использования библиотеки <stdarg.h>
нужно сделать функцию похожую на 3, но без использования библиотеки &lt;stdarg.h&gt; #include...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru