利用 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语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
随机推荐
- Sprite Kit教程:制作一个通用程序 2
注1:本文译自Sprite Kit Tutorial: Making a Universal App: Part 2 目录 动画的定义:可行性 属性列表 添加游戏逻辑 添加音效 何去何从 上一篇文章中 ...
- perl .*?和.*
redis01:/root# cat x2.pl my $str="212121a19823a456123"; if ($str =~/.*a(.*)23/){print &quo ...
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
需要进行jni的开发有一下几个条件: 1:能初步使用C/C++如果不会,请参读 谭浩强的 C编程语言 2:android应用开发已经基本入门,如果没有,请先行学习 这两个条件基本满足后,我们开始了: ...
- Swift - 导航条(UINavigationBar)的使用
与导航控制器(UINavigationController)同时实现导航条和页面切换功能不同. 导航条(UINavgationBar)可以单独使用,添加至任何的UIView中.UINavigation ...
- Linux 高性能server编程——高级I/O函数
重定向dup和dup2函数 #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_o ...
- 【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.cpp
模型实现代码,关键是train函数和predict函数,都很容易. #include <iostream> #include <string> #include <mat ...
- 断剑重铸之日,席卷朗朗乾坤之时--PHP学习一月漫记
传说中阿尔萨斯王子沉沦堕落之后,被巫妖王安置在冰冷的城堡中,静静地等待重出天日,它随身携带的宝剑也埋没与尘土之间,暗淡无光.他想起宝剑伴身,东征西战的峥嵘岁月,忆及如今身陷囹圄,一股怨念由心底升起,许 ...
- 积累的VC编程小技巧之框架窗口及其他
1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...
- flashcache中应用device mapper机制
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备. DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射” ...