利用 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语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
随机推荐
- sqlserver存储过程学习笔记(一)基础知识篇(全)
说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧. 存储过程的优点:1.运行效率高,提供了在服务器端快速执行sql ...
- jvm常用参数设置 good
1.堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx= ...
- 基础知识(10)- 部署应用程序和applet
10.1 JAR文件 10.1.1 清单文件 10.1.2 可运行JAR文件 10.1.3 资源 10.1.4 密封 10.2 Java Web Start 10.2.1 沙箱 10.2. ...
- Visual Studio 控件命名规范(很详细)
VS 控件命名规范 Type Prefix Example Array arr arrShoppingList Boolean bln blnIsPostBack Byte byt bytPixelV ...
- 线段树菜鸟一题+归并排序【求逆序数】POJ2299
题目链接:http://poj.org/problem?id=2299 归并排序解法链接:http://blog.csdn.net/lyy289065406/article/details/66473 ...
- Jetty开发指导:HTTP Client
介绍 Jetty HTTP client模块提供易用的API.工具类和一个高性能.异步的实现来运行HTTP和HTTPS请求. Jetty HTTP client模块要求Java版本号1.7或者更高,J ...
- javascript学习初衷
很久没有过来写东西了,由于要做小网页,介于不懂javascript,一味的去爬其他站点的代码下来,却不能自由组合,控制,达到自己想要的效果, 于是只能沉下心,javascript从头学起,还记得张老师 ...
- hdu1171(DP求两份物品的价值相差最小)
题目信息: 给出一些物品的价值和个数.分成两份,是这两份的价值相差最小(DP方法) http://acm.hdu.edu.cn/showproblem.php? pid=1171 AC代码: /** ...
- TestComplete实测Flex
1.TestComplete提供了已经编译好的Flex界面,可以直接使用: http://support.smartbear.com/samples/testcomplete9/flex/orders ...
- winform下载网页代码
1:webClient client=new WebClient(); client.Downloadstring(地址) client.Downloadfile(地址,保存路径) 2:后台线程dow ...