思路:队列涉及到两端的操作,所以使用头结点和尾结点两个指针,避免在入队操作时遍历整个链表。
代码:
// linkedlistqueue.cpp : 定义控制台应用程序的入口点。
// 链表实现队列
#include "stdafx.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::cerr;
//点结构
typedef struct Node {
int data;
Node *prev; //指向前驱结点
Node *next; //指向后继结点
};
//链表结构
typedef struct Linkedlist {
Node *head; //头结点
Node *tail; //尾结点
};
//插入结点
void enqueue(Linkedlist &L, Node *x)
{
x->prev = L.tail;
if (L.tail != nullptr)
L.tail->next = x;
L.tail = x;
x->next = nullptr;
if (L.head == nullptr) //连接头尾结点
L.head = L.tail;
}
//删除头结点
int dequeue(Linkedlist &L)
{
if (L.head == nullptr)
{
cerr << "queue underflow!" << endl;
return -1;
}
else
{
int temp = L.head->data;
if (L.head->next != nullptr)
L.head = L.head->next;
else
L.head