4指针与队列

文章目录

  • 指针
    • 例一
    • 例二
  • 线性队列
    • 队列手动实现
    • stl队列
  • 循环队列
    • 定义
    • 代码实现
    • 真题
  • 优先队列

指针

4指针与队列_第1张图片

例一

4指针与队列_第2张图片
输出:102030200
说明:
4指针与队列_第3张图片

例二

4指针与队列_第4张图片输出:65 A

线性队列

队列手动实现

4指针与队列_第5张图片4指针与队列_第6张图片

stl队列

4指针与队列_第7张图片

循环队列

定义

4指针与队列_第8张图片

代码实现

#include 
#include 
#define MAXSIZE 100 //最大队列长度
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct {
	ElemType *base;
	//队列空间
	int front;
	//队头指针
	int rear;
	//队尾指针,若队尾不为空,则指向队尾元素的下一个位置
}
SqQueue;
//初始化循环队列
Status initQueue(SqQueue &Q) {
	Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType));
	//申请空间
	Q.front = Q.rear = 0;
	//队空
	return OK;
}
//入队
Status enQueue(SqQueue &Q, ElemType e) {
	if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR;
	//队满,无法添加
	Q.base[Q.rear] = e;
	//插入元素
	Q.rear = (Q.rear + 1) % MAXSIZE;
	//队尾指针+1
	return OK;
}
//出队
Status deQueue(SqQueue &Q, ElemType &e) {
	if (Q.front == Q.rear) return ERROR;
	//队空,无法删除
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXSIZE;
	//队头指针+1
	return OK;
}
//返回队列长度
Status length(SqQueue &Q) {
	return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}

真题

4指针与队列_第9张图片

typedef struct {
	ElemType *elem;
	//队列空间
	int front;
	//队头指针
	int rear;
	//队尾指针,若队尾不为空,则指向队尾元素的下一个位置
}
CTagQueue;
//判满
bool Full(CTagQueue Q) {
	if(Q.tag==1 && Q.front==Q.rear)
	return true;
	return false;
}
//判空
bool Empty(CTagQueue Q) {
	if(Q.tag==0 && Q.front==Q.rear)
	return true;
	return false;
}
//插入元素 x
status EnCQueue(CTagQueue &Q,ElemType x) {
	if(Full(Q)) {
		return ERROR;
	}
	Q.elem[Q.rear] = x;
	Q.rear=(Q.rear+1)%Q.maxSize;
	if(Q.rear == Q.front) Q.tag=1;
	return OK;
}
//出队
Status DeCQueue(CTagQueue &Q,ElemType &x) {
	If(Empty(Q))
	return ERROR;
	x=Q.elem[Q.front];
	Q.front=(Q.front+1)%Q.maxSize;
	if(Q.front==Q.rear) Q.tag=0;
	return OK;
}

优先队列

//大顶堆 = 最大优先队列 -> 最大元素优先出队
// 这里一定要有空格,不然成了右移运算符       ↓↓
priority_queue <int, vector<int>, less<int> > q;
priority_queue <int> q; //默认大顶堆,故可以这样简写

//小顶堆 = 最小优先队列 -> 最小元素优先出队
// 这里一定要有空格,不然成了右移运算符          ↓↓
priority_queue <int, vector<int>, greater<int> > q;
#include
#include 
using namespace std;
int main() {
	//对于基础类型 默认是大顶堆
	priority_queue<int> a;
	//等同于 priority_queue, less > a;
	// 这里一定要有空格,不然成了右移运算符↓↓
	priority_queue<int, vector<int>, greater<int> > c;
	//这样就是小顶堆
	priority_queue<string> b;
	for (int i = 0; i < 5; i++) {
		a.push(i);
		c.push(i);
	}
	while (!a.empty()) {
		cout << a.top() << ' ';
		a.pop();
	}
	cout << endl;
	while (!c.empty()) {
		cout << c.top() << ' ';
		c.pop();
	}
	cout << endl;
	b.push("abc");
	b.push("abcd");
	b.push("cbd");
	while (!b.empty()) {
		cout << b.top() << ' ';
		b.pop();
	}
	cout << endl;
	return 0;
}

具体的内容后续会讲到…

你可能感兴趣的:(麦克算法,指针,队列,c++)