Test

Run Settings
LanguageC++
Language Version
Run Command
//Стек моделируется при помощи динамического массива указателей на линейные массивы размерности N целых. //Указатель стека – два индекса – в массиве указателей и линейном массиве. //В операции push при переполнении текущего линейного массива в массив указателей добавляется новый, //если операция pop переходит к предыдущему массиву, то текущий утилизуется. #include <iostream> using namespace std; const int N = 3; const int M = 3; int **sArr; int sPtr1; int sPtr2; int sSize; void InitStack()//инициализация массива { int i, j; //int p; //sSize = n; //p = n / M; sSize = N * M; sArr = new int*[N]; for (i = 0; i < N; i++) { sArr[i] = new int[M]; for (j = 0; j < M; j++) { sArr[i][j] = 0; } } sPtr1 = sPtr2 = 0; } void DestroyStack()//Удалить стэк { sArr = NULL; delete [] sArr; } int isEmptyS()//Проверка на пустоту { if (sPtr1 == 0 && sPtr2 == 0) return -1; else return 0; } void Push(int x) { //sPtr1 = sSize / M; //sPtr2 = sSize % M - 1; if ((sPtr1 + 1) * (sPtr2 + 1) <= sSize) { if (sPtr2 == 2) { sPtr1 += 1; sPtr2 = 0; } else { sPtr2++; } sArr[sPtr1][sPtr2] = x; } else { sArr[(sSize / M) + 1] = new int[M]; sArr[(sSize / M) + 1][0] = x; cout << "Massive increased" << endl; sPtr1 += 1; sPtr2 = 0; sSize += M; } } void Pop() { if (sPtr2 > 0) { cout << sArr[sPtr1][sPtr2--]; } else if (sPtr2 == 0) { cout << sArr[sPtr1][sPtr2]; delete sArr[sPtr1]; sPtr1--; sPtr2 = M - 1; sSize -= M; } } int show() { // int k1, k2; for (int i = 0; i < sSize; i++) { cout << sArr[i / M][i % M]; } } int main() { setlocale(LC_ALL, "Russian"); int **pp = new int*[N]; int q; for (int i = 0; i < N; i++) { pp[i] = NULL; } int choose; label: cout << "1) Инициализировать стэк" << endl; cout << "2) Положить символ в стэк" << endl; cout << "3) Взять символ из стэка" << endl; cout << "4) Показать стэк" << endl; cout << "0) Выйти" << endl; cin >> choose; switch(choose) { case 1:{InitStack(); goto label;} case 2: { cout << "Введите число" << endl; cin >> q; push(q); goto label; } case 3:{Pop(); goto label;} case 4:{ goto label;} case 0:{goto labelend;} } labelend: for (int i = 0; i < N; i++) { pp[i] = NULL; } delete[]pp; }
Editor Settings
Theme
Key bindings
Full width
Lines