• 链式栈的简单实现


    链式栈的实现:
    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战士。

  • 相关阅读:
    在ubuntu系统使用SSR
    Pandas库
    Numpy
    06-Python之标准库
    do{}while(0)
    inet_XX族函数
    大端小端
    c++ 强制类型转换
    auto类型推导
    const浅析
  • 原文地址:https://www.cnblogs.com/fistao/p/2992956.html
Copyright © 2020-2023  润新知