您的位置:首页 > 编程语言 > C语言/C++

C++_队列(Queue)

2014-11-15 15:57 127 查看
队列(Queue)是一种数据结构,可以在队列的一端插入元素而在队列的另一端删除元素,它有以下特点:

1、允许删除的一端称为队头(front);

2、允许插入的一端称为队尾(reat);

3、当队列中没有元素时称为空队列;

4、当队列中只有一个元素时,队头和队尾指向的节点都是同一个;

5、队列亦称为先进先出(First In First Out)的线性表,简称为FIFO表。队列的修改根据是先进先出的原则,新来的成员总是加入队尾(即不能中间插入),每次离开的成员总是队头才成员(不允许中间离队)。

下面是代码实现:

//
//  Queue.h
//  C++_Test001
//
//  Created by TUSM on 14-11-15.
//  Copyright (c) 2014年 CXM. All rights reserved.
//

#ifndef C___Test001_Queue_h
#define C___Test001_Queue_h

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

typedef struct node
{
    int data;
    struct node *next;
}Node;

typedef struct queue
{
    node *front;
    node *rear;
}Queue;

Queue *creatQueue();
Queue *enqueue(Queue *q, int data);
Queue *dequeue(Queue *q);
int length(Queue *q);
void print(Queue *q);

#endif
//
//  Queue.cpp
//  C++_Test001
//
//  Created by TUSM on 14-11-15.
//  Copyright (c) 2014年 CXM. All rights reserved.
//

#include "Queue.h"

using namespace std;

Queue *creatQueue()
{
    Queue *pQueue = NULL;
    pQueue = (Queue *)malloc(sizeof(Queue));
    pQueue->front = NULL;
    pQueue->rear = NULL;
    return pQueue;
}

Queue *enqueue(Queue *q, int data)
{
    node *pNew = NULL;
    pNew = (Node *)malloc(sizeof(Node));
    pNew->data = data;
    pNew->next = NULL;
    
    if (q->rear == NULL)
    {
        q->front = q->rear = pNew;
    }
    else
    {
        q->rear->next = pNew;
        q->rear = pNew;
    }
    return q;
}

Queue *dequeue(Queue *q)
{
    Node *pNode = NULL;
    pNode = q->front;
    
    if (pNode == NULL)
    {
        cout << "queue is empty" << endl;
        return NULL;
    }
    else
    {
        q->front = q->front->next;
        if (q->front == NULL)
        {
            q->rear = NULL;
        }
        free(pNode);
    }
    return q;
}

int length(Queue *q)
{
    int len = 0;
    Node *pNode = q->front;
    
    if (pNode == NULL)
    {
        return len;
    }
    else
    {
        len = 1;
        while (pNode != q->rear)
        {
            pNode = pNode->next;
            len ++;
        }
    }
    return len;
}

void print(Queue *q)
{
    Node *pNode = NULL;
    pNode = q->front;
    
    if (pNode == NULL)
    {
        cout << "queue is empty" << endl;
        return;
    }
    
    while (pNode != q->rear)
    {
        cout << "data:" << pNode->data << endl;
        pNode = pNode->next;
    }
    cout << "data:" << pNode->data << endl;
    cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: