链式栈的简单实现

链式栈的实现:
1、栈的特点栈顶插入元素和删除元素。
2、链式栈的结点:也是一个数据域和一个链接域。
3、栈采用类来实现:
1)需要设定一个一个栈顶指针 top,指向第一个元素
2)本数据结构需要实现三个重要的方法:
入栈,出栈,输出栈内元素三个方法

栈的结点仍然包含一个数据域和一个链接域:

struct StackNode

{

	int data;

	StackNode *link;

};

 栈的抽象数据类型使用类来表示,重要的方法有入栈、出栈和输出栈中内容三个:

class Stack{

protected:

	StackNode *top;	//先声明一个栈顶指针

public:

	Stack()			//构造函数

	{

		top=new StackNode;	//用默认值初始化这个栈顶指针

		StackNode *p=top;

		p->link=NULL;		//思维点1:需要在这里先将最后一个位置初始化为NULL



	}	

	~Stack();	//析构函数



	//入栈、出栈和输出栈内元素三个方法

	void PushStack(int data);	//入栈

	void PopStack();			//出栈

	void OutputStack();			//输出栈内元素

};

 下面着重对三个算法进行阐述:

入栈算法:
1、新建这个top指针,用默认的初始化值,然后把data赋值给它

void Stack::PushStack(int data)

{

	

	StackNode *newNode=new StackNode;	//声明一个新结点,用于进行链接

	if(newNode==NULL){cout<<"分配错误!"<<endl;}	//这句验证的话很重要

	

	top->data=data;		//将该值赋值给该指针的数据域

	

	//top->link=newNode;	//栈顶指针指向下一个位置 

	//top=newNode;			//这两句有问题??



	newNode->link=top;

	//top->link=NULL;			//将栈低的link域设置为空,否则会出现野指针错误

	top=newNode;		



}

 输出栈内元素的算法:
1、由于栈顶指针指向的位置的数据域并未赋值,则需输出top->link处的值。

void Stack::OutputStack()

{

	top=top->link;

	while(top!=NULL)

	{

		cout<<top->data<<" ";

		top=top->link;

	}

	cout<<endl;

	

}

 出栈算法:
1、栈顶指针下移,返回出栈的元素,用临时指针接受这个值。
2、删除临时指针指向的单元。

void Stack::PopStack()

{

	StackNode *p=top;

	top=top->link;

	delete p;

}

 

总结:

1、出现错误最多的是指针的指向问题:在编程中应该时刻跟踪指针的指向,并且多使用空指针判断语句和异常处理

2、使用异常处理和调试可以节省调试程序的时间。

3、丢掉书本,开始尝试自己去构建程序,而不是一直做CV战士。

你可能感兴趣的:(实现)