wordpress做个人教学网站,南昌做网站的,wordpress 安装 白屏,怎么样注册一个网站摘要#xff1a; it人员无论是使用哪种高级语言开发东东#xff0c;想要更高效有层次的开发程序的话都躲不开三件套#xff1a;数据结构#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合#xff0c;即带“结构”的数据元素的集合 it人员无论是使用哪种高级语言开发东东想要更高效有层次的开发程序的话都躲不开三件套数据结构算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合即带“结构”的数据元素的集合“结构”就是指数据元素之间存在的关系分为逻辑结构和存储结构。 此系列专注讲解数据结构数组、链表、队列、栈、树、哈希表、图通过介绍概念以及提及一些可能适用的场景并以C代码简易实现多方面认识数据结构最后为避免重复造轮子会浅提对应的STL容器。本文介绍的是队Queue。
开发环境VScodeC17
关键词 C数据结构队列Queue 声明本文作者原创转载请附上文章出处与本文链接。 文章目录 摘要正文介绍特性应用 代码实现对应STL 推荐阅读 正文
介绍 队列Queue是一种常见的数据结构它遵循先入先出FIFOFirst In First Out的原则。队列中的元素按照它们进入队列的顺序排列并且只有队首的元素可以被删除队尾的元素可以被添加。 队列也有两种存储表示方法顺序存储用数组实现和链式存储用链表实现顺序存储常见的就是环形队列初始化时必须指定队列容量大小普通队列则基于链表。
特性 先进先出队列的基本操作是遵循FIFO先进先出原则的。这意味着最早添加到队列中的元素将是最早被移除的。这种特性使得队列在处理需要按顺序处理的元素时非常有用比如任务调度、打印作业等。 受限的访问队列只允许在两端进行操作。在队列的一端称为“队尾”或“后端”添加元素而在另一端称为“队头”或“前端”移除元素。这种特性确保了队列中的元素按照它们被添加的顺序进行处理。
应用
队列在多种场景中都有应用包括
任务调度在计算机系统中多个任务可能同时请求CPU资源。使用队列可以确保任务按照它们到达的顺序得到处理。打印机作业队列当一个用户提交一个打印作业时它会被添加到打印队列中。打印机按照作业进入队列的顺序打印它们。网络数据包处理在网络通信中接收到的数据包需要按照它们到达的顺序进行处理。队列可以帮助管理这些数据包确保它们按照正确的顺序被处理。图形界面事件处理在图形用户界面GUI中用户事件如鼠标点击或键盘输入被添加到事件队列中。事件处理程序按照事件进入队列的顺序处理它们。
代码实现
#cqueue.h
#ifndef CQUEUE_H
#define CQUEUE_H
#include iostream
using namespace std;// 队链节点
templateclass T
class CQueueNode
{
public:CQueueNode(T t) :data(t), next(NULL) {}~CQueueNode() { next NULL; }CQueueNode(const CQueueNode node){if (this node){return;}*this node;}CQueueNode operator(const CQueueNode node){if (this node){return *this;}this-data node.data;this-next node.next;return *this;}public:T data;CQueueNode *next;
};// 普通队列实现基于链表
templateclass T
class CQueue
{
public:CQueue() :head(NULL), tail(NULL), node(NULL), m_iSize(0) {}~CQueue(){delete head;head NULL;delete tail;tail NULL;delete node;node NULL;}int size(); // 获取队内成员个数 bool empty(); // 判断是否为空队列void push(T t); // 队尾入队T pop(); // 队首出队T front(); // 返回队首T back(); // 返回队尾void traverse(); // 打印整个队列private:CQueueNodeT* head;CQueueNodeT* tail;CQueueNodeT* node;int m_iSize;
};templateclass T
int CQueueT::size()
{return m_iSize;
}templateclass T
bool CQueueT::empty()
{return 0 m_iSize;
}templateclass T
void CQueueT::push(T t)
{node new CQueueNodeT(t);if (head NULL){head tail node;}else{tail-next node;tail node;}m_iSize;
}templateclass T
T CQueueT::pop()
{if (empty()){throw empty queue.;}node head;head head-next;m_iSize--;return node-data;
}templateclass T
T CQueueT::front()
{if (empty()){throw empty queue.;}return head-data;
}templateclass T
T CQueueT::back()
{if (empty()){throw empty queue.;}return tail-data;
}templateclass T
void CQueueT::traverse()
{CQueueNodeT *node head;while (node ! NULL){cout node-data ;node node-next;}cout endl;
}#endif // !CQUEUE_H#cqueue.cpp
#include cqueue.h
using namespace std;int main(int argc, char**argv)
{CQueuechar queue;queue.push(h);queue.push(e);queue.push(l);queue.push(l);queue.push(o);queue.push( );queue.push(w);queue.push(o);queue.push(r);queue.push(l);queue.push(d);queue.traverse();cout queue.front() endl;cout queue.back() endl;char c queue.pop();cout c endl;queue.traverse();return 0;
}对应STL queue 普通队列。其原理是先进先出FIFO只有队头和队尾可以被访问故不可有遍历行为默认也为deque双端队列 deque 双端队列。支持头插、删尾插、删随机访问较vector容器来说慢,但对于首尾的数据操作比较方便
推荐阅读
C/C专栏https://blog.csdn.net/weixin_45068267/category_12268204.html 内含其它数据结构及对应STL容器使用