`
东边日出西边雨
  • 浏览: 262774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

队列的链式存储结构

 
阅读更多

    队列也是一种特殊的线性表,只不过是一头进另一头出罢了。

 

    下面是队列的基本操作。

 

/* 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

    本文件“队列链式存储(带头结点).zip”提供了一个C++实现的队列链式存储结构,特别地,它使用了带头结点的设计,这对于理解和实现队列具有很好的教学价值。 链式存储的队列不同于数组实现的队列,它不依赖于连续...

    数据结构实验报告2线性表的链式存储结构.pdf

    本实验报告详细介绍了线性表的链式存储结构,通过编程实践深入理解了链表的逻辑结构、基本操作以及链表算法的实现过程。 线性表作为一种常见的数据结构,其特点是元素之间存在一对一的线性关系。线性表中数据元素...

    队列顺序存储&链式存储.rar

    1. **顺序存储**:在顺序存储结构中,队列的元素在内存中是连续存放的。这种存储方式类似于数组,可以通过下标快速访问任意位置的元素。在顺序队列中,通常使用一个数组来模拟队列,数组的前部分存放队列元素,后...

    作业 第三章 栈和队列 顺序存储结构和链式存储结构

    本章主要探讨的是两种常用且基础的数据结构——栈(Stack)和队列(Queue),以及它们的两种基本存储方式:顺序存储结构(Sequential Storage Structure)和链式存储结构(Linked Storage Structure)。我们将深入...

    第三章 栈和队列 顺序存储结构和链式存储结构

    本章将深入探讨两种重要的数据结构——栈和队列,以及它们的两种常见存储方式:顺序存储结构和链式存储结构。 栈(Stack)被称为“后进先出”(Last In, First Out,简称LIFO)的数据结构。栈的操作主要围绕两个...

    插入、删除、查找在顺序或链式存储结构上的实现。

    顺序或链式存储结构上的队列操作实现 队列是数据结构中的一种基本结构,它是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列可以使用顺序存储结构或链式存储结构来实现。在本实验中,我们将使用链式存储...

    线性表的链式存储结构

    线性表的链式存储结构在计算机科学中是一种常见的数据结构,它用于组织和操作一组具有线性顺序的元素。在这种结构中,每个元素都称为节点,每个节点包含数据和指向下一个节点的引用。链式存储与数组不同,因为数组中...

    顺序存储和链式存储的泛型队列_C语言项目

    本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...

    队列的链式存储结构与操作.佟(1).exe

    队列的链式存储结构与操作.佟(1).exe

    队列的顺序操作

    大连民族学院,计科125,你一定会非常满意的,下载吧

    数据结构-链式队列

    链式队列是一种在计算机科学中用于数据组织和操作的数据结构,它在概念上类似于现实生活中的排队等待。链式队列是数据结构课程中的一个重要概念,尤其对于学习C语言和其他编程语言的学生来说,理解并能实际操作链式...

    3.4队列顺序存储结构

    队列可以采用顺序存储或链式存储两种方式进行实现。本节重点讲解顺序存储的方式,即使用连续的内存空间来存储队列中的元素,通常通过数组来实现。 #### 基本思想 队列的顺序存储是利用一组地址连续的存储单元依次...

    队列链式存储的代码详解与实现

    使用链式存储的存储方式实现队列这一数据结构,初学者可以拿去学习与借鉴。

    基于链式存储结构的线性表实现.rar_Table_cameramjx_data structure

    在"Table_cameramjx_data structure"这个主题中,我们可能会看到如何使用C++或Java等编程语言实现这些链式存储结构,并讨论它们在实际问题中的应用,如数据缓存、队列、栈等。通过这个资源,学习者可以深入理解链式...

    队列的顺序存储结构及实现

    队列的存储方式有两种:一种是顺序存储,另一种是链式存储。本文将重点介绍队列的顺序存储结构及其具体实现。 #### 一、队列的顺序存储结构 队列的顺序存储结构,即利用数组来实现队列的功能。数组中的元素按照...

    队列的链式存储与代码实现

    链式存储是实现队列的一种有效方式,尤其是在处理大量数据时,它能提供更灵活的内存管理。 在链式存储的队列中,每个元素被称为一个节点,包含数据域和指针域。数据域用于存储元素值,指针域则指向下一个节点。队列...

    数据结构:队列(链式存储、顺序存储)

    在C语言中,为了实现这些功能,我们需要定义数据结构,例如`struct Node`(链式存储)或`int queue[MAX_SIZE]`(顺序存储),并编写相应的函数,如`createQueue()`, `isEmpty()`, `isFull()`, `enqueue()`, `dequeue...

    队列的链式存储C语言实现

    本项目将探讨如何使用C语言实现队列的链式存储,这涉及到一系列的编程技巧和对数据结构的理解。 首先,我们要理解队列的基本概念。队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构。这意味...

Global site tag (gtag.js) - Google Analytics