基础知识
队列是一种特殊的线性表,里边的元素实现先进先出。
1.自己实现的数据结构
1.1数组实现队列
#pragma once
#ifndef QUEUE
#define QUEUE
#define MAXLEN 100
#include<iostream>
using namespace std;
struct Array {
int* base;//定义数组的基地址
int front;//循环队列的头指针,删除时头指针加1,在非空,永远指对头元素
int rear;//循环队列的尾指针,插入元素队尾指针加1,在非空永远指队尾
};
//用数组实现循环队列
class Queue {
public:
Queue() {
ls.base = new int(MAXLEN);
ls.rear = ls.front = 0;
}
void push(int el) {
if ((ls.rear+1)%MAXLEN!=ls.front) //队列未满
{
ls.base[ls.rear] = el;
(ls.rear+1)%MAXLEN;
}
};
int QueueLength() {
return ((ls.rear - ls.front + MAXLEN) % MAXLEN);
};
int pull() {
int el;
if (ls.front != ls.rear) // 队列不为空
{
el = ls.base[ls.front];
ls.front = (ls.front + 1) % MAXLEN;
return el;
}
};
int getHead() {
if (ls.front != ls.rear)
return ls.base[ls.front];
};
void clearQueue() {
ls.front = ls.rear;
};
void createQueue(int n) {
int i = 0;
for (i; i < n; i++) {
cin >> ls.base[i];
}
ls.rear = n;
};
private:
Array ls;
};
*/
int main() {
Queue Q;
Q.createQueue(5);
Q.push(1);
cout<<Q.pull();*/
1.2用链表实现队列
#pragma once
#ifndef QUEUE
#define QUEUE
#define MAXLEN 100
#include<iostream>
struct QNODE {
int data;
QNODE* next;
};
class Squeue {
public:
Squeue() {
Q = new QNODE;//
front = rear = Q;//首尾巴指针指向头结点
front->next = NULL;
}
void push(int el) {
QNODE* p;
p = new QNODE;
p->data = el;
p->next = NULL;
rear->next = p;
rear = p;
};
int pull() {
int el = 0;
if (front != rear) {
QNODE* p;
p = Q->next;
el = p->data;
Q->next = p->next;
delete p;
}
return el;
};
int getHead() {
if (front != rear)
return Q->next->data;
};
private:
QNODE *front,*rear;//首尾指针;
QNODE* Q;//头结点 ,头结点不存储元素
};
int main()
{
Squeue Q;
int el;
for (int i = 0; i < 3; i++) {
cin >> el;
Q.push(el);
}
cout << Q.pull() << endl;
cout << Q.getHead() << endl;
};
#endif // !1
2.用STL的list实现队列
#include<iostream>
#include"queue.h"
#include<vector>
#include<list>
using namespace std;
template<class T>
class ListQueue {
public:
ListQueue() {
}
void clear() {
Q.clear();
}
bool isEmpty()const {
return Q.empty();
}
T& front() {
return Q.front();
}
T dequeue() {
T el = Q.front();
Q.pop_front();
return el;
}
void enqueue(const T& el) {
Q.push_back(el);
}
private:
int first, last;
list<T> Q;
};
int main()
{
ListQueue<int> Q;
int el;
for(int i=0;i<5;i++)
{
cin >> el;
Q.enqueue(el);
}
cout<<
Q.dequeue();
cout<<Q.front();
Q.clear();
cout<<Q.isEmpty();
};