• 利用 C++ 单向链表实现队列


    利用C++ 单向链表实现数据结构队列,其实和上一篇基本内容相同,仅仅是插入的时候在链表的尾部插入,取元素都是一样的,都从头部取。

    #pragma once
    
    #include "stdio.h"
    //利用链表来实现队列,先进先出
    
    class queue
    {
    public:
    	queue(void);
    	queue(int value);
    	~queue(void);
    private:
    	int m_value;
    	queue* m_pnext;
    public:
    	void push(int value);
    	bool pop(int *value);
    	bool top(int *value);
    	bool empty();
    	int size();
    	void output();
    	void destroy();
    };
    
    #include "stdafx.h"
    #include "queue.h"
    
    
    //构造一个空的队列头指针
    queue::queue(void)
    {
    	m_value = 0x00;
    	m_pnext = NULL;
    }
    
    //构建一个队列结点
    queue::queue(int value)
    {
    	m_value = value;
    	m_pnext = NULL;
    }
    
    //输出被删除掉的结点
    queue::~queue(void)
    {
    	printf("destroy node its value=%d
    ", m_value);
    }
    
    //元素入队列
    void queue::push(int value)
    {
    	queue *pnode = this;
    	while(pnode->m_pnext != NULL)
    	{
    		pnode = pnode->m_pnext;
    	}
    	queue *newnode = new queue(value);
    	pnode->m_pnext = newnode;
    	m_value++;
    }
    
    
    //元素出队列
    bool queue::pop(int *value)
    {
    	bool result = false;
    	if (m_pnext != NULL)
    	{
    		*value = m_pnext->m_value;
    		m_pnext = m_pnext->m_pnext;
    		result = true;
    		m_value--;
    	}
    	return result;
    }
    
    //得到队列顶部的元素
    bool queue::top(int *value)
    {
    	bool result = false;
    	if (m_pnext != NULL)
    	{
    		*value = m_pnext->m_value;
    		result = true;
    	}
    	return result;
    }
    
    //判断队列是否为空
    bool queue::empty()
    {
    	bool result = false;
    	if (m_pnext == NULL)
    	{
    		result = true;
    	}
    	return result;
    }
    
    //得到队列大小
    int queue::size()
    {
    	return m_value;
    }
    
    
    //输出队列中的元素
    void queue::output()
    {
    	queue* pnode = this;
    	while(pnode->m_pnext != NULL)
    	{
    		printf("index=%d
    ", pnode->m_pnext->m_value);
    		pnode = pnode->m_pnext;
    
    	}
    }
    
    //销毁队列
    void queue::destroy()
    {
    	while(m_pnext != NULL) 
    	{
    		queue* pnode = m_pnext;
    		m_pnext = m_pnext->m_pnext;
    		delete pnode;
    	}
    }
    
    


    主程序测试

    // myqueue.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "queue.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	queue myqueue;
    	for(int i=0; i<10; i++)
    	{
    		myqueue.push(i * 10);
    	}
    
    	myqueue.output();
    	printf("queue size=%d
    ", myqueue.size());
    
    	if (myqueue.empty())
    	{
    		printf("queue is empty
    ");
    	}
    	else 
    	{
    		printf("queue is not empty
    ");
    	}
    
    	myqueue.destroy();
    
    	int value = 0;
    	for(int i=0; i<10; i++)
    	{
    		if (myqueue.pop(&value))
    		{
    			printf("pop value=%d successfully
    ", value);
    		}
    		else
    		{
    			printf("pop unsuccessfully
    ");
    		}
    	}
    
    	printf("queue size=%d
    ", myqueue.size());
    
    	if (myqueue.empty())
    	{
    		printf("queue is empty
    ");
    	}
    	else 
    	{
    		printf("queue is not empty
    ");
    	}
    
    	getchar();
    	return 0;
    }
    
    


     

  • 相关阅读:
    node.js创建服务,发送请求后返回数据
    node.js写入文件
    node.js读取文件
    elementUi的隐藏组件el-scrollbar滚动条
    [笔记]何为Linux及其文件系统(二)
    [笔记]何为Linux及其文件系统(一)
    [转文]简单理解数学、密码学、计算机、互联网、分布式数据库、区块链、分布式账本、密码货币
    [转文]Linux搭建最简单的邮件服务器
    [笔记]Why is UDP used for DNS instead of TCP?
    什么是IP地址、子网掩码、路由和网关?
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3180186.html
Copyright © 2020-2023  润新知