链队列的C++实现
#include<iostream>
using namespace std;
//节点类
template<class T>
struct QNode
{
T data;
QNode *next;
};
//队列类
template<class T>
struct LinkList
{
QNode<T> * front;
QNode<T> * rear;
size_t size;
}; //构造一个空队列
template<class T>
void InitQueue(LinkList<T> & que)
{
que.front = (QNode<T> *)malloc(sizeof(QNode<T>));
if(!que.front) exit(0);
que.size = 0;
que.rear = que.front;
que.rear->next = 0;
}
//销毁队列
template<class T>
void DestroyQueue(LinkList<T>& que)
{
QNode<T> * p = que.front->next;
free(que.front);
while(p != 0)
{
que.front = p->next;
free(p);
p = que.front;
}
}
//清空队列
template<class T>
void ClearQueue(LinkList<T>& que)
{
QNode<T> * p = que.front->next;
while(p != 0)
{
que.rear = p->next;
free(p);
p = que.rear;
}
que.rear = que.front;
que.front->next = 0;
que.size = 0;
}
//返回队列的长度
template<class T>
int QueueLength(LinkList<T>& que)
{
return que.size;
}
//返回队列的队首元素
template<class T>
T GetHead(LinkList<T>& que)
{
return que.front->next->data;
}
//元素入队
template<class T>
void EnQueue(LinkList<T>& que,T t)
{
QNode<T> *p = (QNode<T>*)malloc(sizeof(QNode<T>));
if(!p) exit(0);
p->data = t;
p->next = 0;
que.rear->next = p;
que.rear = p;
que.size++;
}
//元素出队
template<class T>
bool DeQueue(LinkList<T>& que,T & t)
{
if(que.size==0)
return false;
QNode<T> *p = que.front->next;
que.front->next = p->next;
que.size--;
t = p->data;
free(p);
return true;
}
//从对头到队尾元素遍历调用visit函数
template<class T>
void VisitQueue(LinkList<T>& que,void (*visit)(T &t))
{
QNode<T> *p = que.front->next;
while(p != 0)
{
(*visit)(p->data);
p = p->next;
}
}
//測试函数
template<class T>
void Print(T &t)
{
cout<<t<<endl;
}
template<class T>
void AddOne(T &t)
{
t++;
} int main()
{
//创建一个空的队列
LinkList<int> queue;
//初始化队列
InitQueue(queue);
//元素入队
EnQueue(queue,1);
EnQueue(queue,2);
EnQueue(queue,3);
EnQueue(queue,4);
//返回队列的长度
cout<<"队列的长度: "<<QueueLength(queue)<<endl;
//输出全部元素
VisitQueue(queue,Print<int>); //返回队列的队首元素
cout<<"队列的队首元素: "<<GetHead(queue)<<endl;
//元素出队
int a ;
if(DeQueue(queue,a))
{
cout<<"出队元素: "<<a<<endl;
}
//返回队列的长度
cout<<"队列的长度: "<<QueueLength(queue)<<endl;
//输出全部元素
VisitQueue(queue,Print<int>);
//元素出队
if(DeQueue(queue,a))
{
cout<<"出队元素: "<<a<<endl;
}
//返回队列的长度
cout<<"队列的长度: "<<QueueLength(queue)<<endl;
//输出全部元素
VisitQueue(queue,Print<int>); //将全部元素加一
cout<<"将全部元素加一"<<endl;
VisitQueue(queue,AddOne<int>);
//输出全部元素
VisitQueue(queue,Print<int>); //清空队列
ClearQueue(queue);
//销毁队列
DestroyQueue(queue);
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXljMTAyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
链队列的C++实现的更多相关文章
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例
1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...
- java与数据结构(8)---java实现链队列
链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...
- 链队列之C++实现
链队列时建立在单链表的基础之上的.由于是动态分配节点内存,所以无需判满. 链队列的形式如下: 1.队列空 2.队列存在数据 下面介绍下C++实现的链队列,VC6下调试通过. 1.文件组织 2.lq.h ...
- C语言实现链队列的初始化&进队&出队
/*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...
- c/c++链队列
链队列 链队列就是简化了的单链表 nodequeue.h #ifndef __NODEQUEUE__ #define __NODEQUEUE__ #include <stdio.h> #i ...
- 【Java】 大话数据结构(7) 循环队列和链队列
本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...
- 队列的理解和实现(二) ----- 链队列(java实现)
什么是链队列 链队是指采用链式存储结构实现的队列,通常链队用单链表俩表示.一个链队显然需要两个分别指示队头和队尾的指针,也称为头指针和尾指针,有了这两个指针才能唯一的确定. package 链队列; ...
- C语言——循环队列和链队列的基本运算
// 循环队列#include <stdio.h> #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20 ...
- C语言链队列
链队列类似于单链表,为了限制只能从两端操作数据,其结构体内有2个指针分别指向头尾,但队列里的节点用另一种结构体来表示,头尾指针则为指向该结构体的类型.只能通过操作头尾指针来操作队列. typedef ...
- java实现链队列
java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...
随机推荐
- oracle 之flashback 深入研究。
oracle 之flashback 深入研究. 今天是2013-08-24,开始进行oracle flashback 内部原理研究,记录一下笔记. SQL> startup ORACLE ins ...
- linux的fork()函数-进程控制
进程作为构成系统的基本细胞,不仅是系统中独立活动的实体,而且是独立竞争资源的基本实体.它要经历创建.执行.等待.终止等一系列过程. 一.fork入门知识(转载) 一个进程,包括代码.数据和分配给进程的 ...
- vue 数据劫持 响应式原理 Observer Dep Watcher
1.vue响应式原理流程图概览 2.具体流程 (1)vue示例初始化(源码位于instance/index.js) import { initMixin } from './init' import ...
- JavaWeb 路径问题
路径问题 CreateTime--2016年9月22日15:19:56 Author:Marydon 一.jsp页面 src="../demo/clazz/clazz_add.js&qu ...
- sql遍历全部数据集
DECLARE @a int set @a = 1 while @a < 5 BEGIN select top(1) * from QPShuGameMatchDB..MatchScoreSta ...
- TaskMapper
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- 解决Java“syntax error on token enum”问题
本来我的问题是jsp中变量名命名和保留关键字重复了,如下图.无意中又找到下面的问题和解决方案作为笔记. 解决方法:修改变量名. ==================================== ...
- HDUOJ-----2838Cow Sorting(组合树状数组)
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDUOJ---1195Open the Lock
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- PAT 1087 All Roads Lead to Rome
PAT 1087 All Roads Lead to Rome 题目: Indeed there are many different tourist routes from our city to ...