利用 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\n", 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\n", 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\n", myqueue.size()); if (myqueue.empty())
{
printf("queue is empty\n");
}
else
{
printf("queue is not empty\n");
} myqueue.destroy(); int value = 0;
for(int i=0; i<10; i++)
{
if (myqueue.pop(&value))
{
printf("pop value=%d successfully\n", value);
}
else
{
printf("pop unsuccessfully\n");
}
} printf("queue size=%d\n", myqueue.size()); if (myqueue.empty())
{
printf("queue is empty\n");
}
else
{
printf("queue is not empty\n");
} getchar();
return 0;
}
利用 C++ 单向链表实现队列的更多相关文章
- OC实现 单向链表
需要实现一个消息队列,队列具有 FIFO 特点,即先入先出,在这里采用单向链表实现队列逻辑. 本次要实现的队列要求: 1. 节点可以存放任意类型数据 2. 线程安全 简单说明一下: 1. 创建CFNo ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
- 转:Linus:利用二级指针删除单向链表
感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是 ...
- 单向链表的简单Java实现-sunziren
写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“阅读更多”按钮,惹不起我躲得起. 最近面试的过程中,发现有的公 ...
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...
- C语言单向链表
1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
随机推荐
- python httpConnection详解
模块urllib,urllib2,httplib的区别 httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装. ...
- SQL server语句练习
相关表: <span style="white-space:pre">create table DEPT ( <span style="white-sp ...
- hdu 4710 Balls Rearrangement 数论
这个公倍数以后是循环的很容易找出来,然后循环以内的计算是打表找的规律,规律比较难表述,自己看代码吧.. #include <iostream> #include <cstdio> ...
- qt槽函数中,窗口镶嵌窗口的问题,求解
my_label=newQLabel(ui->widget); my_Label->setText("yvhvv"); 我把这插入到构造函数中,正确显示. 我把这插入到 ...
- Linux入门基础#2:Linux文件系统基本结构
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- 计算VMT的长度
function GetVirtualMethodCount(AClass: TClass): Integer; begin Result := (PInteger(Integer(AClass) + ...
- 随机IP代理
第一个例子就设置了一个代理IP,也是不靠谱的,最好的方式就是多设置几个,如第二个例子,通过http://www.youdaili.net/Daili/你可以找到很多代理IP, 抓取国内网站时尽量选取中 ...
- Servlet API中文版
基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...
- Android常用控件之RatingBar的使用
RatingBar控件比较常见就是用来做评分控件,先上图看看什么是RatingBar 在布局文件中声明 <?xml version="1.0" encoding=" ...
- Struts 2.x仍然明显落后于时代。 Struts 2.x这一类老牌Web MVC开发框架仅能用于开发瘦客户端应用,无法用来开发对于交互体验要求更高的应用。
后来我在工作中陆续使用过Struts 1.x和Struts 2.x.我曾经把一个开源的基于Struts 1.x的自助式广告联盟应用移植到Spring MVC,还基于Struts 2.x做过网站开发.S ...