Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- // дефиниция на указател към обект с параметри:
- // числова променлива, указател към следващ обект.
- typedef struct Element *pointerToObject;
- // дефиниране на глобални (за по лесно :)) променливи:
- // 2 указателя и една числова променлива за входните данни
- pointerToObject sObject, sBuffer;
- int userInput;
- // създаване на структората
- struct Element{
- int data;
- pointerToObject next;
- };
- //итеративна функция за добавяне на елемент към стека
- void iterativeAdd(){
- while( cin>>userInput ){ // докато има вход
- // при въвеждане на 11 се прекратява добавянето на пореден елемент
- if(userInput == 11) return;
- sBuffer = new Element;
- sBuffer->data = userInput;
- sBuffer->next = sObject;
- sObject = sBuffer;
- }
- }
- //итеративна функция извеждане на елементите в стека
- //на конзолата. Работи се само с буферната променлива,
- //като се започва от последната въведена променлива (FIFO)
- void iterativePrint(){
- sBuffer = sObject;
- while (sBuffer != NULL){
- cout << sBuffer->data << " ";
- sBuffer = sBuffer->next;
- }
- }
- //функция за принтиране чрез рекурсия
- void recursivePrint(pointerToObject obj){
- if (obj == NULL){
- cout << endl;
- return;
- }
- //в зависимост от това, къде ше сложим разпечатването,
- //елеметите биват достъпвани и разпечатвани в различен ред
- cout << obj->data << " "; // тук печата като стек (FIFO)
- recursivePrint(obj->next);
- cout << obj->data << " "; // тук като опашка (LIFO)
- }
- // Функция за рекурсивно добавяне на елементи.
- // !!! ТЯ РЕАЛИЗИРА ОПАШКА, А НЕ СТЕК. УКАЗАТЕЛЯT
- // sObject ОСТАВА ДА СОЧИ КЪМ ПЪРВИЯТ ДОБАВЕН ОБЕКТ.
- // При нея не се налага ползване на допълнителен буфер.
- void recursiveAdd(pointerToObject obj){
- cin >> userInput;
- if(userInput == 11){
- obj->data = 999999999;
- return;
- }
- obj->data = userInput;
- obj->next = new Element;
- recursiveAdd(obj->next);
- }
- int main(){
- setlocale(0,"");
- //създаваме си нов елемент от основният обект
- sObject = new Element;
- //и го зануляваме (необходимо за проверката за край на принтирането)
- sObject = NULL;
- //
- cout << "Моля въведете числа в стека:\n";
- cout << "(използвайте '11' за край на въвеждането)\n";
- iterativeAdd();
- /* За да мога да пусна следващата функция recursiveAdd()
- * трябва да променя 2те условия при разпечатващите функции
- * (obj->data != 999999999) и (obj->data == 999999999)
- * както и да закоментирам sObject = NULL;
- */
- // recursiveAdd(sObject);
- cout << "Разпечатване чрез итерация\n";
- iterativePrint();
- cout << "\nРазпечатване чрез рекурсия\n";
- recursivePrint(sObject);
- cout << endl;
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment