队列也是一种特殊的线性表,只不过是一头进另一头出罢了。
下面是队列的基本操作。
/* queue.h */
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include <string.h>
using namespace std;
#define TYPE int
typedef struct _Node {
TYPE data;
struct _Node* next;
} Node, *Pnode;
class Queue {
private:
Pnode front;
Pnode rear;
public:
Queue();
~Queue();
bool InitQueue();
void DestroyQueue();
void ClearQueue();
bool QueueEmpty();
int QueueLength();
bool GetHead(TYPE&);
bool EnQueue(TYPE);
bool DeQueue(TYPE&);
void QueueTraverse();
};
#endif
/* queue.cpp */
#include "queue.h"
Queue::Queue() {
cout<<"Constructor"<<endl;
front = NULL;
rear = NULL;
}
Queue::~Queue() {
cout<<"Destructor"<<endl;
DestroyQueue();
}
bool Queue::InitQueue() {
Pnode p = new Node;
if (!p) {
cout<<"Init Queue fail"<<endl;
return false;
}
front = p;
rear = p;
return true;
}
void Queue::DestroyQueue() {
if (!rear) {
return;
}
while (front) {
Pnode p = front;
front = front->next;
delete p;
}
rear = NULL;
}
void Queue::ClearQueue() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return;
}
while (front != rear) {
Pnode p = front;
front = front->next;
delete p;
}
memset(front, 0, sizeof(Node));
}
bool Queue::QueueEmpty() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
return true;
}
return false;
}
int Queue::QueueLength() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return 0;
}
int n = 0;
Pnode p = front;
while (p != rear) {
n++;
p = p->next;
}
return n;
}
bool Queue::GetHead(TYPE& e) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
return false;
}
e = front->next->data;
return true;
}
bool Queue::EnQueue(TYPE data) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
Pnode p = new Node;
if (!p) {
cout<<"EnQueue fail"<<endl;
return false;
}
p->data = data;
rear->next = p;
rear = p;
return true;
}
bool Queue::DeQueue(TYPE& e) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
cout<<"debug empty"<<endl;
return false;
}
e = front->next->data;
Pnode p = front->next;
front->next = front->next->next;
if (p == rear) {
rear = front;
}
delete p;
return true;
}
void Queue::QueueTraverse() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return;
}
Pnode p = front->next;
while (p) {
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
分享到:
相关推荐
### 队列的顺序与链式存储结构 #### 概述 在计算机科学中,队列是一种重要的数据结构,其遵循先进先出(FIFO)原则,即最先加入队列的数据元素会最先被移除。队列有两种主要的存储方式:顺序存储和链式存储。这两...
本文件“队列链式存储(带头结点).zip”提供了一个C++实现的队列链式存储结构,特别地,它使用了带头结点的设计,这对于理解和实现队列具有很好的教学价值。 链式存储的队列不同于数组实现的队列,它不依赖于连续...
1. **顺序存储**:在顺序存储结构中,队列的元素在内存中是连续存放的。这种存储方式类似于数组,可以通过下标快速访问任意位置的元素。在顺序队列中,通常使用一个数组来模拟队列,数组的前部分存放队列元素,后...
本章主要探讨的是两种常用且基础的数据结构——栈(Stack)和队列(Queue),以及它们的两种基本存储方式:顺序存储结构(Sequential Storage Structure)和链式存储结构(Linked Storage Structure)。我们将深入...
本章将深入探讨两种重要的数据结构——栈和队列,以及它们的两种常见存储方式:顺序存储结构和链式存储结构。 栈(Stack)被称为“后进先出”(Last In, First Out,简称LIFO)的数据结构。栈的操作主要围绕两个...
顺序或链式存储结构上的队列操作实现 队列是数据结构中的一种基本结构,它是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列可以使用顺序存储结构或链式存储结构来实现。在本实验中,我们将使用链式存储...
线性表的链式存储结构在计算机科学中是一种常见的数据结构,它用于组织和操作一组具有线性顺序的元素。在这种结构中,每个元素都称为节点,每个节点包含数据和指向下一个节点的引用。链式存储与数组不同,因为数组中...
本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...
队列的链式存储结构与操作.佟(1).exe
大连民族学院,计科125,你一定会非常满意的,下载吧
链式队列是一种在计算机科学中用于数据组织和操作的数据结构,它在概念上类似于现实生活中的排队等待。链式队列是数据结构课程中的一个重要概念,尤其对于学习C语言和其他编程语言的学生来说,理解并能实际操作链式...
队列可以采用顺序存储或链式存储两种方式进行实现。本节重点讲解顺序存储的方式,即使用连续的内存空间来存储队列中的元素,通常通过数组来实现。 #### 基本思想 队列的顺序存储是利用一组地址连续的存储单元依次...
使用链式存储的存储方式实现队列这一数据结构,初学者可以拿去学习与借鉴。
在"Table_cameramjx_data structure"这个主题中,我们可能会看到如何使用C++或Java等编程语言实现这些链式存储结构,并讨论它们在实际问题中的应用,如数据缓存、队列、栈等。通过这个资源,学习者可以深入理解链式...
队列的存储方式有两种:一种是顺序存储,另一种是链式存储。本文将重点介绍队列的顺序存储结构及其具体实现。 #### 一、队列的顺序存储结构 队列的顺序存储结构,即利用数组来实现队列的功能。数组中的元素按照...
链式存储是实现队列的一种有效方式,尤其是在处理大量数据时,它能提供更灵活的内存管理。 在链式存储的队列中,每个元素被称为一个节点,包含数据域和指针域。数据域用于存储元素值,指针域则指向下一个节点。队列...
在C语言中,为了实现这些功能,我们需要定义数据结构,例如`struct Node`(链式存储)或`int queue[MAX_SIZE]`(顺序存储),并编写相应的函数,如`createQueue()`, `isEmpty()`, `isFull()`, `enqueue()`, `dequeue...
本项目将探讨如何使用C语言实现队列的链式存储,这涉及到一系列的编程技巧和对数据结构的理解。 首先,我们要理解队列的基本概念。队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构。这意味...