C++数据结构--队列

基础知识

队列是一种特殊的线性表,里边的元素实现先进先出。

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();
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值