利用 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语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
随机推荐
- Spring Boot,Spring Data JPA多数据源支持
1 配置文件 wisely.primary.datasource.driverClassName=oracle.jdbc.OracleDriver wisely.primary.datasource. ...
- 基于visual Studio2013解决面试题之0402合并升序链表并去重
题目
- Redis核心解读:集群管理工具(Redis-sentinel)
Redis核心解读:集群管理工具(Redis-sentinel) - Redis - TechTarget数据库 Redis核心解读:集群管理工具(Redis-sentinel)
- android程序中使用命令行及获得命令行执行后的内容
在开发android项目中,需要在程序中使用命令行执行,获得命令行执行后的结果并做处理. 下面是自己写的一个小例子,供以后参考使用: public String android_command(){ ...
- Shell echo命令
Shell echo命令 echo "It is a test" 这里的双引号完全可以省略 .显示变量 read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shel ...
- C/C++中char* 与char []定义的区别
转载请注明来自souldak,微博:@evagle Question: 给你一个字符串例如abb输出它包含的字符的所有可能排列. 例如abb输出3个:abb,bab,bba Answer: 假设我们自 ...
- XML和对象属性互转的基类
本人做了一个XML和对象属性互转的基类,现在放上来有兴趣拿去看一下,用法很简单,声明一个BaseConversion的子类,该子类与你想转换的对象相对应,然后覆盖基类的两个虚方法,然后在里面写元素与对 ...
- 2014年Windows平台软件推荐:神器小工具(骨灰级
原文 http://www.wtoutiao.com/a/120621.html 底层工具 “If you know how to use Process Monitor competently, ...
- shell 调试
感觉编写shell在查找错误的过程中,很让你崩溃,还好shell也提供了一些调试的方式: 语法检查 -n选项做语法检查,而不执行脚本 sh -n script_name.sh 启动 ...
- extjs desktop startmenu (開始菜单)
extjs desktop 的開始菜单 二级菜单,仅仅是简单演示实现原理,如 须要动态生成,自己改造就可以,下面基本方法原理: 首先 建立一个js文件 生成開始菜单数据: function Get ...