1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным.
В описании темы указываем язык!!!
struct stek { int d; struct stek *next; //указатель на следующий элемент списка (стека) };
void push(stek **netx, int d); //функция будет помещать элемент в стек // next – указатель на вершину стека int pop(stek **netx); //функция будет извлекать элемент их стека //вершина которого - next
void push(stek **next, int d) { stek *pv = new stek; //объявляем новую динамическую переменную типа stek pv->d=d; //записываем значение, которое помещается в стек pv->next=*next; //связываем новый элемент стека с предыдущим *next=pv; //новый элемент стека становится его вершиной }
int pop(stek **next) { int temp=(*next)->d; //извлекаем в переменную temp значение в вершине стека stek *pv=*next; //запоминаем указатель на вершину стека, чтобы затем //освободить выделенную под него память *next=(*next)->next; //вершиной становится предшествующий top элемент delete pv; //освобождаем память, тем самым удалили вершину return temp; //возвращаем значение, которое было в вершине }
int main() { char v[25]="5 9 8 + 4 6 * * 7 + * "; stek *next=0; int a,b; int i=0; while (v[i]!='\0') { if (v[i] == '+') push(&next,pop(&next)+pop(&next)); if (v[i] == '*') push(&next,pop(&next)*pop(&next)); if (v[i] == '-') push(&next,-(pop(&next)-pop(&next))); if ((v[i]>='0') && (v[i]<='9')) push(&next,0); while ((v[i]>='0')&&(v[i]<='9')) push(&next,10*pop(&next)+(v[i++]-'0')); i++; } printf("\n %i \n",pop(&next)); return 0; }
Проблема в том,что я не знаю как реализовать операцию деления,потому что стек построен таким образом что 1 2 \ выдаст мне не 0.5,как должно а выдаст 2,потому что будет поделено не 1 на 2,а 2 на 1 изза того что двойка будет выше по стеку.С + и * не имеет значение положение,с - просто беру обратное число,а вот что с делением сделать ума не приложу.Еще мне не очень нравится,как выглядить эта прога,поэтому хотелось бы чтобы дали советы как это реализовать по другому,чтобы поэффективнее было.