• 队列


    队列是一种限定存取位置的线性表。它只允许在表的一端插入,在另一端删除。

    队列的核心思维是:入队的时候用队尾指针控制,出队的时候用队首指针控制。

    编程总结:

    1、在类中声明变量,在构造函数中初始化,是个很好的编程方法。

    2、入队的时候用队尾指针控制,出队的时候用队首指针控制。

    3、用到指针的时候,时时刻刻判断指针的值和指向。

    队列的抽象数据类型表示代码为:

    //队列结点
    struct QueueNode
    {
    	int data;
    	QueueNode *next;
    };
    
    //队列,先入先出的数据结构
    class Queue{
    public:
    	//构造函数析构函数
    	Queue()
    	{
    		//要善于利用构造函数初始化这个操作
    		queuehead=NULL;
    		queuerear=NULL;
    	}
    	~Queue(){}
    
    	//入队,出队操作
    	void EnQueue(int data);	//入队函数
    	int	 DeQueue();			//出队函数
    
    private:
    	//核心思想:入队是用队尾指针控制的,出队是用队头指针控制的。
    	QueueNode *queuehead,*queuerear;
    };
    

    入队函数的算法:

    1、要声明一个队头指针和队尾指针,并在构造函数中初始化为空。最佳实践。
    2、判断队头指针是否为空,如果为空,则说明是空队列,则将队头指针,队尾指针都指向新建的结点地址。
    3、如果队头指针不为空,则不是空队列,则用队尾指针进行操作。
    4、队尾指针的下一个地址指向新建的结点,进行赋值操作,然后队尾指针指向这个结点。

    代码:

    void Queue::EnQueue(int data)
    {
    	if(queuehead==NULL)
    	{
    		queuehead=queuerear=new QueueNode;
    		if(queuehead==NULL)
    			cout<<"队列结点分配失败"<<endl;
    		queuehead->data=data;
    		queuerear->data=data;	//分配这个值
    	}
    	else
    	{
    		queuerear->next=new QueueNode;
    		if(queuerear->next==NULL)cout<<"内存分配错误"<<endl;
    		queuerear->next->data=data;
    		queuerear=queuerear->next;
    		queuerear->next=NULL;	//将最后的这个元素赋值为0
    	}
    	
    	
    }
    

    出队函数的算法:

    1、如果队头指针不等于队尾指针,则将队头指针指向的值赋值给要返回
    的值,然后将队头指针下移一个单位。
    2、如果队头和队尾指针相等了,则说明队列为空了。
    3、如果队头指针的下一个位置为空了,就说明队列遍历完了。

    代码:

    int Queue::DeQueue()
    {
    	int data;
    	if(queuehead!=NULL)		//判断队头指针是否为空
    	{
    		QueueNode *p;
    		data=queuehead->data;
    		p=queuehead;
    		queuehead=queuehead->next;
    		delete p;	//释放这个指针
    		return data;
    	}
    	else
    	{
    		cout<<"队列中已经没有元素了"<<endl;
    		return 0;
    	}
    
    
    }
    

    队列的操作比较简单,后续需要完成队列的变形及其在具体应用中算法。

    1、循环队列。

    2、优先级队列。

    3、双端队列。

    4、打印二项式的系数。

    5、电路布线。

  • 相关阅读:
    中间件的应用
    报表和日志
    Cookie和Session
    表单的应用
    静态资源和Ajax请求
    导入导出EXEC
    DATEDIFF() 函数返回两个日期之间的时间
    解决echarts柱形图X轴标题显示不全的问题
    Sqlserver 游标 慢
    sql语句根据日期查询,本周,本月,本年,今日相关统计
  • 原文地址:https://www.cnblogs.com/fistao/p/3038536.html
Copyright © 2020-2023  润新知