1

Тема: Створення корзини інтернет магазину з використанням стека

Тема 'створення корзини інтернет магазину з використанням стека'

#include <cstdio>
typedef int T;
class stack{
protected:
    struct element{
        T data;
        struct element* next;
    }*begin;
    void free_stack(struct element* arg){
        if (arg){
            free_stack(arg->next);
            delete arg;
        }
    }
stack(const stack& copy){};
stack& operator=(stack& value){return *this;};
public:
    stack():begin(NULL){};
    void push(T x){
        struct element* newEl=new struct element;
        newEl->data=x;
        newEl->next=begin;
        begin=newEl;
    }
    T pop(){
        if (!begin) return -1;
        T value=begin->data;
        struct element* newEl=begin->next;
        delete begin;
        begin=begin->next;
        return value;   
    }
    void clear(){
        free_stack(begin);
        begin=NULL;
    }
    void output(){
        struct element* cur=begin;
        while(cur){
            printf("%d, ", cur->data);
            cur=cur->next;
        }
        putchar('\n');
    }
    ~stack(){
        free_stack(begin);
    }
};
int main(){
    stack st0;
    for (int i=1; i<256; i*=2)
        st0.push(i);
    st0.output();
    getchar();
    return 0;
}

допоможіть будь ласка написати таку програму, я в розпачі 
Якщо не напишу то завалю курсач, а як це написати поняття не маю 
надзвичайно сильно прошу допомогти з цим!! 
я от реалізував сам стек, але як розписати це по умові завдання не уявляю,  будь ласка допоможіть дописати це по умовія
я зробив стек де значний беруться з циклу, 
але як зробити так щоб їх вводити і вони б передавалися в стек і сортувалися  а потім по необхідності і віддалялися я не знаю

2

Re: Створення корзини інтернет магазину з використанням стека

Стек - це структура даних, у якій елементи нагромаджуються строго в одному порядку та за принципом "перший увійшов - останнім вийшов". Тож про сортування стеку мови взагалі не має іти.

З іншого боку, можна витягати елементи зі стеку до якої-небудь іншої структури (list, vector, абощо) і там уже сортувати, як душа забажає.

Видалення зі стеку - задача проста і еквівалентна видаленню елемента в у списку. Послідовно:
1. Знаходимо елемент у стеку для видалення;
2. Переприв'язуємо попередній (нижній) до наступного (верхнього);
3. Видаляємо елемент.

З.І: якщо вам потрібен стек просто як факт, а не з власним велосипедом, можете використати готовий шаблонний з STL.

3

Re: Створення корзини інтернет магазину з використанням стека

Bartash написав:

Стек - це структура даних, у якій елементи нагромаджуються строго в одному порядку та за принципом "перший увійшов - останнім вийшов". Тож про сортування стеку мови взагалі не має іти.

З іншого боку, можна витягати елементи зі стеку до якої-небудь іншої структури (list, vector, абощо) і там уже сортувати, як душа забажає.

Видалення зі стеку - задача проста і еквівалентна видаленню елемента в у списку. Послідовно:
1. Знаходимо елемент у стеку для видалення;
2. Переприв'язуємо попередній (нижній) до наступного (верхнього);
3. Видаляємо елемент.

З.І: якщо вам потрібен стек просто як факт, а не з власним велосипедом, можете використати готовий шаблонний з STL.

Ну а всеж таки, як би ви порадили підлаштувати цей код під загальну тему,
можливо можете навести приклад
це булоб не погано

4

Re: Створення корзини інтернет магазину з використанням стека

От приклад роботи зі стеком:

Загалом - наближено до коду проблеми
#include <stack>
#include <list>
#include <iostream>
#include <cmath>

typedef int T;

using std::list;
using std::stack;
using std::cout;
using std::endl;

int main()
{
srand(time(0));
    stack<T> items;
    
    for(int i=0; i<128; i++)
    {
        //example
        items.push( rand()%999+1 );
    }
    cout<<"Size of stack: "<<items.size()<<endl;
    cout<<"Top item: "<<items.top()<<endl;
    cout<<"Get all items from the stack and push into list to sort then..."<<endl;
    
    list<T> itemList;
    
    while(!items.empty())
    {
        itemList.push_back(items.top());
        cout<<items.top()<<"\t";
        items.pop();
    }
    
    cout<<endl<<"Finish."<<endl<<"Size of stack: "<<items.size()<<endl;
    cout<<"Sorting..."<<endl;
    itemList.sort();
    for(list<T>::iterator iter = itemList.begin(); iter!=itemList.end();iter++)
        cout<<(*iter)<<"\t";
    cout<<endl<<"Pushing back into stack..."<<endl;
    for(list<T>::iterator iter = itemList.begin(); iter!=itemList.end();iter++)
        items.push(*iter);
    
    cout<<"Size of stack: "<<items.size()<<endl;
    
    return 0;
}