`
chinrui
  • 浏览: 96751 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

链式队列的实现

阅读更多
队列(C++)

/*---------------------- 简单队列的链式实现------------------------- */
/*
功能:
1、以一定数目的元素初始化一个队列
2、判断队列是否为空
3、按队列顺序展示队列元素值
4、删除一个队列结点
5、获得队列的第一个元素值
6、向队列中加入一个元素结点
*/

#include <iostream>
#include <stdlib.h>

using namespace std;

typedef int Elemtype;
typedef struct Node {
    Elemtype data;
    Node *next;
} *queueNode;
typedef struct indexNode {
    queueNode head;
    queueNode rear;
} *indexQueue;

//函数声明
void initQueue(indexQueue);
queueNode initNode();
void initQueue(indexQueue , int);
void displayQueue(indexQueue);
bool isEmptyQueue(indexQueue);
Elemtype pop(indexQueue);
Elemtype getHead(indexQueue);
void push(indexQueue , Elemtype);

int main()
{
    indexQueue iQueue = (indexQueue)malloc(sizeof(indexQueue));
    //initQueue(iQueue);
    int length;
    cout << "输入要初始化队列长度:" << endl;
    cin >> length;
    cout << "输入 " << length << " 个元素值,用于初始化队列:" << endl;
    initQueue(iQueue , length);

    //测试:按顺序展示元素
    cout << "队列中的元素为:" << endl;
    displayQueue(iQueue);

    //测试:从队列中出一个元素
    Elemtype popReturn = pop(iQueue);
    cout << "出队列的第一个元素为:" << popReturn << endl;
    cout << "出队列一个元素后,队列里面的元素为:" << endl;
    displayQueue(iQueue);

    //测试:获得队列中的第一个元素值
    Elemtype headValue = getHead(iQueue);
    cout << "队列中第一个元素为:" << headValue <<  endl;
    cout << "获取元素后,队列中的元素值:" << endl;
    displayQueue(iQueue);

    //测试:向队列尾添加一个元素结点
    Elemtype eInsert;
    cout << "输入要添加到队列的结点的元素值:" << endl;
    cin >> eInsert;
    push(iQueue , eInsert);
    cout << "添加一个元素后,队列中的元素结点的值分别为:" << endl;
    displayQueue(iQueue);

    return 0;
}

//初始化一个空的队列
void initQueue(indexQueue iQueue) {
    iQueue->head = NULL;
    iQueue->rear = NULL;
}

//初始化一个结点
queueNode initNode() {
    queueNode qReturn = (queueNode)malloc(sizeof(Node));
    qReturn->next = NULL;
    return qReturn;
}


//初始化一个带元素值的队列
void initQueue(indexQueue iQueue , int length) {
    initQueue(iQueue);
    queueNode newQueue;
    for(int i = 0; i < length; i++) {
        newQueue = initNode();
        cin >> newQueue->data;
        if(i == 0) {
            iQueue->rear = newQueue;
            iQueue->head = newQueue;
        } else {
            iQueue->rear->next = newQueue;
            iQueue->rear = newQueue;
        }
    }
}

//展示队列里面所有元素
void displayQueue(indexQueue iQueue) {
    queueNode qCurr = iQueue->head;
    while(qCurr != NULL) {
        cout << qCurr->data << "  ";
        qCurr = qCurr->next;
    }
    cout << endl;
}

//判断队列元素是否为空
bool isEmptyQueue(indexQueue iQueue) {
    if(iQueue->head == iQueue->rear) {
        return true;
    }
    return false;
}

//取出一个队列元素
Elemtype pop(indexQueue iQueue) {
    if(isEmptyQueue(iQueue)) {
        return -1;
    }
    queueNode qCurr = iQueue->head;
    iQueue->head = qCurr->next;
    Elemtype eReturn = qCurr->data;
    free(qCurr);
    return eReturn;
}

//获得队列第一个元素
Elemtype getHead(indexQueue iQueue) {
    if(isEmptyQueue(iQueue)) {
        return -1;
    }
    return iQueue->head->data;
}

//向队列尾添加元素
void push(indexQueue iQueue , Elemtype insertValue) {
    queueNode qInsert = initNode();
    qInsert->data = insertValue;
    if(isEmptyQueue(iQueue)) {
        iQueue->head = qInsert;
        iQueue->rear = qInsert;
        return;
    }
    iQueue->rear->next = qInsert;
    iQueue->rear = qInsert;
}
分享到:
评论

相关推荐

    C++数据结构之链式队列实现

    以下是对链式队列实现的详细解释: ### 1. 链式队列的基本概念 队列是一种线性数据结构,其操作特性是只允许在队列的一端(称为队尾)进行插入操作(入队),而在另一端(称为队头)进行删除操作(出队)。链式...

    链式队列实现例子

    JAVA语言实现数据的链式结构 分享下挣挣人气

    数据结构--链式队列

    动态内存管理是链式队列实现中的核心部分。在创建新节点时,我们需要使用`malloc`函数为节点分配内存,而在不再需要节点时,使用`free`函数释放内存以防止内存泄漏。正确管理内存对于程序的稳定性和性能至关重要,...

    顺序队列和链式队列的实现

    顺序队列和链式队列都是常用的队列实现方式,各有其优缺。顺序队列的优点是实现简单、队列元素可以随机访问,缺点是队列扩容复杂、队列元素的添加和删除效率较低。链式队列的优点是队列元素的添加和删除效率高、队列...

    liunx多线程_生产者与消费者模型_链式队列实现.zip|多线程_生产者与消费者模型_链式队列实现.zip

    fun.cpp中主要为队列读写功能的实现 struct Queue *init_queue();//初始化 void en_queue(struct Queue *q,void* data,size_t len);//向队列的尾部插入一个数据。 void de_queue(struct Queue *q);//删除头部一个...

    链式队列的基本运算

    链式队列是一种在计算机科学中广泛使用的数据结构,它基于链表实现,与传统的数组队列相比,具有更大的灵活性。在本程序中,我们主要关注链式队列的六个核心操作,这些操作对于理解和应用链式队列至关重要。 1. **...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    球钟问题(链式栈和链式队列实现)

    【球钟问题】是一个独特的计时机制,...这个实现不仅展示了链式栈和链式队列的应用,还提供了对时间表示的一种创新思考。理解这个机制可以帮助我们更好地理解数据结构在实际问题中的应用,以及如何利用它们来解决问题。

    c\c++链式队列 源代码

    ### C/C++中的链式队列实现 在C/C++中,我们可以使用结构体来定义链表节点,包含数据和指向下一个节点的指针。例如,对于一个整型数据的链式队列,可以定义如下: ```c++ struct Node { int data; Node* next; };...

    c语言 链式队列的实现

    在C语言中,链式队列的实现通常涉及结构体的定义、节点的创建与销毁、以及一系列针对队列操作的函数。下面我们将深入探讨链式队列的实现细节。 首先,我们需要定义一个结构体来表示队列中的节点。每个节点包含两个...

    duilie.rar_链式队列

    在本案例中,"duilie.rar_链式队列" 提供了关于链式队列实现的详细内容,通过duilie.doc文档可以深入学习其具体实现。 ### 链式队列的基本概念 1. **队列**:队列是一种先进先出(First In First Out, FIFO)的数据...

    链式队列C实现

    链式队列是一种数据结构,它是队列的一种实现方式,主要特点是使用链表来存储队列中的元素。在计算机科学中,队列是一种先进先出(First In First Out, FIFO)的数据结构,常用于处理一系列待处理的任务或事件。与...

    链式队列的表示和实现源码

    下面将详细讨论链式队列的表示、实现、以及常用的操作。 首先,我们来看链式队列的表示。链式队列由两部分组成:队头(front)和队尾(rear)。队头指向队列的第一个元素,而队尾指向当前队列的最后一个元素。在...

    C语言实现链式队列

    链式队列

    链式队列优化C实现

    链式队列是一种数据结构,它使用链表作为底层实现,相比数组实现的队列,具有更大的灵活性。在本主题中,我们将详细讨论...在C语言中,这样的链式队列实现可以灵活应用于各种需要先进先出(FIFO)规则的数据处理场景。

    链式队列c程序

    在完成这些基本操作后,我们可以编写主函数来测试我们的链式队列实现,例如: ```c int main() { Queue* q = initQueue(); enqueue(q, 1); enqueue(q, 2); enqueue(q, 3); printf("Queue: "); printQueue(q)...

    严蔚敏-数据结构--链式队列c++实现

    链式队列是一种在计算机科学中广泛使用的数据结构,它以链表为基础,实现了队列“先进先出”(FIFO)的原则。在C++中实现链式队列,可以让我们更加灵活地处理数据,特别是在处理大量数据或者需要动态扩展容量的场景...

    数据结构栈、链式队列、树的实现

    以下是一个简单的链式队列实现: ```python class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedQueue: def __init__(self): self.front = self.rear = None def ...

    队列的链式实现(java)

    以下是一个简单的Java链式队列实现: ```java public class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } public class Queue { private Node front; ...

Global site tag (gtag.js) - Google Analytics