记录一下作者在学习数据结构中的所有数据结构和算法的具体实现
顺带补充相关知识
本系列文章注重的是代码实现!代码实现!代码实现!
这里放一个代码合集(目前正在逐步更新中)
代码合集链接
什么是队列
队列也是一种插入和删除受限的线性表。
只允许在一端插入,另一端删除的受限制的线性表。
由于顺序实现的顺序队列会存在假溢出问题,所以我们更常使用的是循环队列,
循环队列就是将顺序队列从逻辑上变为一个环状数组。
顺序循环队列代码实现
#include<iostream>
using namespace std;
/*
由于顺序实现的顺序队列会存在假溢出问题,所以我们直接实现循环队列
在循环队列中,区分队满和队空有多种处理方式。
1.牺牲一个存储单元,入队时少用一个队列单元。(最常用,所以实现这一种)
队满:(q.rear+1)%N==q.front
队空:q.rear==q.front
2.结构体中增加一个size字段,用来记录元素个数
队满:显然size==N
队空:显然size==0
*/
const int N = 100;//最大容量
typedef struct queue {
int rear;//队尾
int front;//队头
int data[N];
}sq;
// 初始化队列
void initQueue(sq& q) {
q.front = q.rear = 0;
}
// 是否为空
bool isEmpty(sq q) {
return q.front == q.rear;
}
// 是否队满
bool isFull(sq q){
return (q.rear + 1) % N == q.front;
}
// 入队
bool push(sq& q,int num) {
if (isFull(q))return false;
q.data[q.rear] = num;
q.rear = (q.rear + 1) % N;
return true;
}
// 出队
bool pop(sq& q,int& num) {
if (isEmpty(q))return false;
num = q.data[q.front];
q.front = (q.front + 1) % N;
return true;
}
// 读队首元素
bool getFront(sq& q,int& num) {
if (isEmpty(q))return false;
num = q.data[q.front];
return true;
}
链队实现
链队相当于一个有头尾节点的单链表
#include<iostream>
typedef struct linkNode {
int data;
struct linkNode* next;
}linkNode;
typedef struct {
linkNode* front;
linkNode* rear;
}linkQueue;
bool initQueue(linkQueue& q) {
q.front = q.rear = (linkNode*)malloc(sizeof(linkNode));
if (q.front == NULL || q.rear == NULL)return false;
q.front->next = NULL;
return true;
}
bool isEmpty(linkQueue q) {
if (q.front == q.rear)return true;
else return false;
}
bool enQueue(linkQueue& q, int x) {
linkNode* s = (linkNode*)malloc(sizeof(linkNode));
if (s == NULL)return false;
s->data = x;
s->next = NULL;
q.rear->next = s;
q.rear = s;
return true;
}
bool deQueue(linkQueue& q, int& x) {
if (isEmpty(q))return false;
linkNode* p = q.front->next;
x = p->data;
q.front->next = p->next;
if (q.rear == p)q.rear = q.front;
free(p);
return true;
}
bool getHead(linkQueue q, int& x) {
if (isEmpty(q))return false;
x = q.front->next->data;
return true;
}
int main() {
return 0;
}
参考
王道数据结构考研复习指导书
严蔚敏数据结构
2546

被折叠的 条评论
为什么被折叠?



