数据结构与算法(C语言版)__链式队列

用链表做的队列
先进先出
使用C++模板类
动态数组做可能会浪费空间,但是链表的利用率就比较高,今天用链表做一个队列。

在VS2013中新建项目,在头文件中加入QueueLi.h在原文件中加入main.cpp

//QueueLi.h
#ifndef QUEUELI_H
#define QUEUELI_H
template<class Object>
class Queue{
public:
    Queue();
    ~Queue();
    bool isEmpty() const;
    const Object & getFront() const;
    void enqueue(const Object & x);
    Object dequeue();
    void makeEmpty();
private:
    struct ListNode{
        Object element;
        ListNode * next;

        ListNode(const Object & theElement, ListNode *n = 0)
            :element(theElement), next(n){}
    };

    ListNode *front;
    ListNode *back;
};

template<class Object>
Queue<Object>::Queue(){
    front = back = 0;
}

template<class Object>
Queue<Object>::~Queue(){
    makeEmpty();
}

template<class Object>
void Queue<Object>::makeEmpty(){
    while (!isEmpty())
        dequeue();
}

template<class Object>
bool Queue<Object>::isEmpty()const{
    return front == 0;
}

template<class Object>
const Object & Queue<Object>::getFront()const{
    if (isEmpty())
        throw "Queue is empty.";
    return front->element;
}

template <class Object>
void Queue<Object>::enqueue(const Object &x){
    if (isEmpty())
        back = front = new ListNode(x);
    else
        back = back->next = new ListNode(x);
}

template<class Object>
Object Queue<Object>::dequeue(){
    Object frontItem = getFront();
    ListNode *old = front;
    front = front->next;
    delete old;

    return frontItem;
}
#endif
//main.cpp
#include<iostream>

#include"QueueLi.h"

using namespace std;

int main(){

    cout << "测试链式队列:" << endl;
    Queue<int> myQ;
    myQ.enqueue(10);
    myQ.enqueue(20);
    myQ.enqueue(30);
    cout << myQ.getFront() << endl;
    myQ.dequeue();
    cout << myQ.getFront() << endl;
    cout << myQ.dequeue() << endl;
    cout << myQ.dequeue() << endl;
    for (int j = 0; j < 8; j++){
        for (int i = 0; i < 8; i++){
            myQ.enqueue(i);
        }
        while (!myQ.isEmpty())
            cout << myQ.dequeue() << endl;
    }
    system("pause");
    return 0;
}

总结:使用数组和使用链表做队列速度都差不多,但是链表的代码量比较少,而且链表占用的内存也比较少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值