zoukankan      html  css  js  c++  java
  • 链队列之C++实现

                链队列时建立在单链表的基础之上的。由于是动态分配节点内存,所以无需判满。

              链队列的形式如下:

    1、队列空

    2、队列存在数据

             下面介绍下C++实现的链队列,VC6下调试通过。

    1、文件组织

    2、lq.h链队列类的说明

    #ifndef _LQ_H_
    #define _LQ_H_
    
    typedef int dataType;
    
    struct node                 //队列节点
    {
    	dataType data;          //数据域
    	node *next;             //指针域
    };
    
    class lq
    {
    public:
    	lq();                     //构造函数
    	~lq();                    //析构函数
    	void push(dataType var);  //入队
    	void pop();               //出队
    	dataType front();         //取对头元素,对头不变化
    	bool isEmpty();           //判空.head=tail=NULL时队列为空
    
    private:
    	node *head;               //对头指针
    	node *tail;               //队尾指针
    };
    
    #endif


    3、lq.cpp链队列的定义

    #include <iostream>
    #include "lq.h"
    using namespace std;
    
    lq::lq()
    {
    	head = NULL;           //head=tail=NULL时队列为空
    	tail = NULL;
    }
    
    lq::~lq()
    {
    	node *ptr = NULL;
    
    	while(head != NULL)
    	{
    		ptr = head->next;
    		delete head;
    		head = ptr;
    	}
    }
    
    void lq::push(dataType var)
    {
    	node *ptr = new node;
    
    	ptr->data = var;
    	ptr->next = NULL;
    	if(tail != NULL)         
    	{
    		tail->next = ptr;       //不是入队的第一个节点
    	}
    	else
    	{
    		head = ptr;				//如果是入队的第一个节点
    	}
    	tail = ptr;
    }
    
    void lq::pop()
    {
    	node *ptr = head->next;
    
    	delete head;
    	head = ptr;
    
    	if(head == NULL)         //head时要将tail也赋为NULL
    	{
    		tail = NULL;
    	}
    }
    
    dataType lq::front()
    {
    	return head->data;
    }
    
    bool lq::isEmpty()
    {
    	return head == NULL && tail == NULL;
    }
    


    4、main.cpp

    #include <iostream>
    #include "lq.h"
    using namespace std;
    
    int main()
    {
    	lq exp;
    	int i =0;
    
    	for(i=0;i<100;i++)
    	{
    		exp.push(i);
    	}
    
    	for(i=0;i<200;i++)
    	{
    		if(!exp.isEmpty())
    		{
    			cout<<exp.front()<<endl;
    			exp.pop();
    		}
    	}
    
    	if(exp.isEmpty())
    	{
    		cout<<"队列为空!"<<endl;
    	}
    
    	return 0;
    }
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/james1207/p/3293784.html
Copyright © 2011-2022 走看看