链式栈完善版

上一篇关于链式栈有一些小问题,这次解决了,记录一下。

抽象数据类型代码:

//栈内元素顶点

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;

	}

}

完美收工。

你可能感兴趣的:(栈)