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

  1. #pragma once
  2.  
  3. #include "stdio.h"
  4. //利用链表来实现队列,先进先出
  5.  
  6. class queue
  7. {
  8. public:
  9. queue(void);
  10. queue(int value);
  11. ~queue(void);
  12. private:
  13. int m_value;
  14. queue* m_pnext;
  15. public:
  16. void push(int value);
  17. bool pop(int *value);
  18. bool top(int *value);
  19. bool empty();
  20. int size();
  21. void output();
  22. void destroy();
  23. };
  24.  
  25. #include "stdafx.h"
  26. #include "queue.h"
  27.  
  28. //构造一个空的队列头指针
  29. queue::queue(void)
  30. {
  31. m_value = 0x00;
  32. m_pnext = NULL;
  33. }
  34.  
  35. //构建一个队列结点
  36. queue::queue(int value)
  37. {
  38. m_value = value;
  39. m_pnext = NULL;
  40. }
  41.  
  42. //输出被删除掉的结点
  43. queue::~queue(void)
  44. {
  45. printf("destroy node its value=%d\n", m_value);
  46. }
  47.  
  48. //元素入队列
  49. void queue::push(int value)
  50. {
  51. queue *pnode = this;
  52. while(pnode->m_pnext != NULL)
  53. {
  54. pnode = pnode->m_pnext;
  55. }
  56. queue *newnode = new queue(value);
  57. pnode->m_pnext = newnode;
  58. m_value++;
  59. }
  60.  
  61. //元素出队列
  62. bool queue::pop(int *value)
  63. {
  64. bool result = false;
  65. if (m_pnext != NULL)
  66. {
  67. *value = m_pnext->m_value;
  68. m_pnext = m_pnext->m_pnext;
  69. result = true;
  70. m_value--;
  71. }
  72. return result;
  73. }
  74.  
  75. //得到队列顶部的元素
  76. bool queue::top(int *value)
  77. {
  78. bool result = false;
  79. if (m_pnext != NULL)
  80. {
  81. *value = m_pnext->m_value;
  82. result = true;
  83. }
  84. return result;
  85. }
  86.  
  87. //判断队列是否为空
  88. bool queue::empty()
  89. {
  90. bool result = false;
  91. if (m_pnext == NULL)
  92. {
  93. result = true;
  94. }
  95. return result;
  96. }
  97.  
  98. //得到队列大小
  99. int queue::size()
  100. {
  101. return m_value;
  102. }
  103.  
  104. //输出队列中的元素
  105. void queue::output()
  106. {
  107. queue* pnode = this;
  108. while(pnode->m_pnext != NULL)
  109. {
  110. printf("index=%d\n", pnode->m_pnext->m_value);
  111. pnode = pnode->m_pnext;
  112.  
  113. }
  114. }
  115.  
  116. //销毁队列
  117. void queue::destroy()
  118. {
  119. while(m_pnext != NULL)
  120. {
  121. queue* pnode = m_pnext;
  122. m_pnext = m_pnext->m_pnext;
  123. delete pnode;
  124. }
  125. }

主程序测试

  1. // myqueue.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "queue.h"
  6.  
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. queue myqueue;
  10. for(int i=0; i<10; i++)
  11. {
  12. myqueue.push(i * 10);
  13. }
  14.  
  15. myqueue.output();
  16. printf("queue size=%d\n", myqueue.size());
  17.  
  18. if (myqueue.empty())
  19. {
  20. printf("queue is empty\n");
  21. }
  22. else
  23. {
  24. printf("queue is not empty\n");
  25. }
  26.  
  27. myqueue.destroy();
  28.  
  29. int value = 0;
  30. for(int i=0; i<10; i++)
  31. {
  32. if (myqueue.pop(&value))
  33. {
  34. printf("pop value=%d successfully\n", value);
  35. }
  36. else
  37. {
  38. printf("pop unsuccessfully\n");
  39. }
  40. }
  41.  
  42. printf("queue size=%d\n", myqueue.size());
  43.  
  44. if (myqueue.empty())
  45. {
  46. printf("queue is empty\n");
  47. }
  48. else
  49. {
  50. printf("queue is not empty\n");
  51. }
  52.  
  53. getchar();
  54. return 0;
  55. }

利用 C++ 单向链表实现队列的更多相关文章

  1. OC实现 单向链表

    需要实现一个消息队列,队列具有 FIFO 特点,即先入先出,在这里采用单向链表实现队列逻辑. 本次要实现的队列要求: 1. 节点可以存放任意类型数据 2. 线程安全 简单说明一下: 1. 创建CFNo ...

  2. Linus:利用二级指针删除单向链表

    Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...

  3. 【转】Linus:利用二级指针删除单向链表

    原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...

  4. 转:Linus:利用二级指针删除单向链表

    感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是 ...

  5. 单向链表的简单Java实现-sunziren

    写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“阅读更多”按钮,惹不起我躲得起. 最近面试的过程中,发现有的公 ...

  6. C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)

    #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...

  7. C语言单向链表

    1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...

  8. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  9. 教你如何使用Java手写一个基于链表的队列

    在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...

随机推荐

  1. sqlserver存储过程学习笔记(一)基础知识篇(全)

    说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧. 存储过程的优点:1.运行效率高,提供了在服务器端快速执行sql ...

  2. jvm常用参数设置 good

    1.堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx= ...

  3. 基础知识(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. ...

  4. Visual Studio 控件命名规范(很详细)

    VS 控件命名规范 Type Prefix Example Array arr arrShoppingList Boolean bln blnIsPostBack Byte byt bytPixelV ...

  5. 线段树菜鸟一题+归并排序【求逆序数】POJ2299

    题目链接:http://poj.org/problem?id=2299 归并排序解法链接:http://blog.csdn.net/lyy289065406/article/details/66473 ...

  6. Jetty开发指导:HTTP Client

    介绍 Jetty HTTP client模块提供易用的API.工具类和一个高性能.异步的实现来运行HTTP和HTTPS请求. Jetty HTTP client模块要求Java版本号1.7或者更高,J ...

  7. javascript学习初衷

    很久没有过来写东西了,由于要做小网页,介于不懂javascript,一味的去爬其他站点的代码下来,却不能自由组合,控制,达到自己想要的效果, 于是只能沉下心,javascript从头学起,还记得张老师 ...

  8. hdu1171(DP求两份物品的价值相差最小)

    题目信息: 给出一些物品的价值和个数.分成两份,是这两份的价值相差最小(DP方法) http://acm.hdu.edu.cn/showproblem.php? pid=1171 AC代码: /** ...

  9. TestComplete实测Flex

    1.TestComplete提供了已经编译好的Flex界面,可以直接使用: http://support.smartbear.com/samples/testcomplete9/flex/orders ...

  10. winform下载网页代码

    1:webClient client=new WebClient(); client.Downloadstring(地址) client.Downloadfile(地址,保存路径) 2:后台线程dow ...