Я делаю шаблон стека на основе указателя.Метод push работает нормально, но мой метод pop не работает.Кто-то может увидеть, что здесь не так?В GDB я показываю, что второй цикл while вызывает ошибку сегментации.В чем дело?
Вот код:
#include <iostream>
#include <string>
using namespace std;
template <typename k>
class stack;
template <typename k>
class node{
private:
friend class stack<k>;
k data;
node<k> *next;
public:
node(k _x): data(_x), next(NULL) {}
};
template <typename k>
class stack{
private:
node<k> *start;
unsigned int i;
public:
stack(): start(NULL), i(0) {}
~stack(){
while(i!=0) pop();
}
void push(k element){
node<k> *ptr;
node<k> *temp;
ptr=new node<k>(element);
if(start==NULL){
start=ptr;
ptr->next==NULL;
}
else{
while(temp->next!=NULL) temp=temp->next;
temp->next=ptr;
ptr->next=NULL;
}
i++;
}
int pop(){
if(i==1){
int item=start->data;
start=NULL;
i=0;
return item;
}
else{
node<k> *temp=start; //k is my typenam in templates
node<k> *top=start;
while(temp->next!=NULL) temp=temp->next; //getting to last element
while(top->next!=temp) top=top->next; //getting to element before the last
top->next=NULL; //setting next to NULL
int item=temp->data; //getting data from element popped
delete(temp); //deleting last node
i--; //decreasing the size
return item; //returning popped element
}
}
bool isempty(){
if(i==0) return 1;
else return 0;
}
int rozmiar(){
return i;
}
};
int main()
{
stack<char> s;
string slowo;
cin>>slowo;
for(int i=0; i<slowo.length(); i++){
s.push(slowo[i]);
}
for(int i=0; i<slowo.length(); i++){
s.pop();
}
return 0;
}
В основном есть тест, вменяющий слово, помещающий отдельные буквы в стек, а затем читающий наоборот, используя pop.РЕДАКТИРОВАТЬ.Добавлен полный код.