文章目录
指针
例一
输出:102030200
说明:
例二
输出:65 A
线性队列
队列手动实现
stl队列
循环队列
定义
代码实现
#include <stdio.h>
#include <malloc.h>
#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;
}
真题
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<iostream>
#include <queue>
using namespace std;
int main() {
//对于基础类型 默认是大顶堆
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > 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;
}
具体的内容后续会讲到…