上一篇关于链式栈有一些小问题,这次解决了,记录一下。
抽象数据类型代码:
//栈内元素顶点 struct Stacknode { int data; Stacknode *nextnode; }; //链式栈类定义 class Stack{ public: //构造函数,析构函数 Stack() { top=NULL; //初始化栈顶指针 bottom=NULL; } ~Stack(){} //入栈,出栈函数 void Push(int data); int Pop(); private: Stacknode *top; //栈顶指针 Stacknode *bottom; //栈底指针 };
入栈函数代码:
void Stack::Push(int data) //链接顺序 { if(top==NULL) { top=new Stacknode; if(top==NULL)cout<<"内存分配错误"<<endl; top->data=data; bottom=top; bottom->nextnode=NULL; //将第一个结点的指针域设置为空 } else { top=new Stacknode; if(top==NULL)cout<<"内存分配错误"<<endl; top->data=data; top->nextnode=bottom; //这个p应该记录上一次的位置 bottom=top; //这样写代码很完美 } }
出栈函数:
int Stack::Pop() { Stacknode *p=NULL; int data; if(top!=NULL) { p=top; data=p->data; top=top->nextnode; //语法错误 delete p; return data; } }
完美收工。