当前位置: 首页 > news >正文

这几年做哪些网站致富基于ssh框架的网站开发流程

这几年做哪些网站致富,基于ssh框架的网站开发流程,网站开发报价明细,台州建设网站公司队列的详细实现与扩展队列的基本概念队列是一种先进先出(FIFO)的线性数据结构,具有以下特点:只允许在表的一端(队尾/rear)进行插入操作(入队/Enqueue)只允许在另一端(队首…

队列的详细实现与扩展

队列的基本概念

队列是一种先进先出(FIFO)的线性数据结构,具有以下特点:

  • 只允许在表的一端(队尾/rear)进行插入操作(入队/Enqueue)
  • 只允许在另一端(队首/front)进行删除操作(出队/Dequeue)
  • 基本操作包括初始化、入队、出队、判空、判满、获取队首元素等

循环队列的完整实现

结构定义与宏定义

#define MAXQSIZE 100  // 队列最大长度
typedef int ElemType; // 元素类型可根据需要修改typedef struct {ElemType data[MAXQSIZE];int front;  // 队头指针,指向队首元素int rear;   // 队尾指针,指向队尾元素的下一个位置
} CircularQueue;

基本操作实现

  1. ​初始化队列​
void InitQueue(CircularQueue *Q) {Q->front = Q->rear = 0;
}
  1. ​入队操作​
bool EnQueue(CircularQueue *Q, ElemType e) {if ((Q->rear + 1) % MAXQSIZE == Q->front) // 队列满return false;Q->data[Q->rear] = e;Q->rear = (Q->rear + 1) % MAXQSIZE;return true;
}
  1. ​出队操作​
bool DeQueue(CircularQueue *Q, ElemType *e) {if (Q->front == Q->rear) // 队列空return false;*e = Q->data[Q->front];Q->front = (Q->front + 1) % MAXQSIZE;return true;
}
  1. ​获取队首元素(不删除)​
bool GetHead(CircularQueue Q, ElemType *e) {if (Q.front == Q.rear) // 队列空return false;*e = Q.data[Q.front];return true;
}
  1. ​队列判空​
bool QueueEmpty(CircularQueue Q) {return Q.front == Q.rear;
}
  1. ​队列判满​
bool QueueFull(CircularQueue Q) {return (Q.rear + 1) % MAXQSIZE == Q.front;
}
  1. ​获取队列长度​
int QueueLength(CircularQueue Q) {return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}

循环队列的变体实现

  1. ​不牺牲存储空间的实现方法​
// 添加一个size成员记录当前队列长度
typedef struct {ElemType data[MAXQSIZE];int front;int rear;int size; // 当前队列元素个数
} CircularQueueEx;bool EnQueueEx(CircularQueueEx *Q, ElemType e) {if (Q->size == MAXQSIZE) // 队列满return false;Q->data[Q->rear] = e;Q->rear = (Q->rear + 1) % MAXQSIZE;Q->size++;return true;
}bool DeQueueEx(CircularQueueEx *Q, ElemType *e) {if (Q->size == 0) // 队列空return false;*e = Q->data[Q->front];Q->front = (Q->front + 1) % MAXQSIZE;Q->size--;return true;
}

链式队列的完整实现

结构定义

typedef struct QNode {ElemType data;struct QNode *next;
} QNode;typedef struct {QNode *front;  // 队头指针,指向头结点QNode *rear;   // 队尾指针,指向最后一个结点
} LinkQueue;

基本操作实现

  1. ​初始化链队​
void InitQueue(LinkQueue *Q) {Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));if (!Q->front) exit(OVERFLOW); // 内存分配失败Q->front->next = NULL;
}
  1. ​销毁链队​
void DestroyQueue(LinkQueue *Q) {while (Q->front) {Q->rear = Q->front->next;free(Q->front);Q->front = Q->rear;}
}
  1. ​入队操作​
bool EnQueue(LinkQueue *Q, ElemType e) {QNode *p = (QNode *)malloc(sizeof(QNode));if (!p) return false; // 内存分配失败p->data = e;p->next = NULL;Q->rear->next = p;Q->rear = p;return true;
}
  1. ​出队操作​
bool DeQueue(LinkQueue *Q, ElemType *e) {if (Q->front == Q->rear) // 队列空return false;QNode *p = Q->front->next;*e = p->data;Q->front->next = p->next;if (Q->rear == p) // 若删除的是最后一个结点Q->rear = Q->front;free(p);return true;
}
  1. ​获取队首元素(不删除)​
bool GetHead(LinkQueue Q, ElemType *e) {if (Q.front == Q.rear) // 队列空return false;*e = Q.front->next->data;return true;
}
  1. ​队列判空​
bool QueueEmpty(LinkQueue Q) {return Q.front == Q.rear;
}
  1. ​获取队列长度​
int QueueLength(LinkQueue Q) {int length = 0;QNode *p = Q.front;while (p != Q.rear) {length++;p = p->next;}return length;
}

队列的应用场景

  1. ​操作系统中的进程调度​

    • 使用队列管理就绪进程,按照FIFO原则分配CPU时间
  2. ​打印任务管理​

    • 多个打印任务按提交顺序排队等待打印
  3. ​广度优先搜索(BFS)​

    • 用于图的遍历和最短路径查找
  4. ​消息队列​

    • 在分布式系统中用于进程间通信
  5. ​缓冲区管理​

    • 如键盘缓冲区、网络数据包缓冲区等

性能分析与比较

操作循环队列时间复杂度链队时间复杂度
初始化O(1)O(1)
入队O(1)O(1)
出队O(1)O(1)
获取队首元素O(1)O(1)
判空O(1)O(1)
判满O(1)不需要
空间利用率固定大小动态分配

​选择建议​​:

  • 当元素数量可预估且固定时,使用循环队列更高效
  • 当元素数量不可预知或变化较大时,使用链队更灵活
  • 循环队列更适合嵌入式系统等内存受限环境
  • 链队更适合需要频繁动态增长和收缩的场景

扩展:双端队列(Deque)

双端队列是一种允许在两端进行插入和删除操作的队列,结合了队列和栈的特性。

typedef struct {ElemType data[MAXQSIZE];int front;  // 指向队首元素int rear;   // 指向队尾元素的下一个位置
} Deque;// 前端插入
bool PushFront(Deque *D, ElemType e) {if ((D->front - 1 + MAXQSIZE) % MAXQSIZE == D->rear)return false; // 队列满D->front = (D->front - 1 + MAXQSIZE) % MAXQSIZE;D->data[D->front] = e;return true;
}// 后端插入
bool PushRear(Deque *D, ElemType e) {return EnQueue(D, e); // 同普通队列的入队
}// 前端删除
bool PopFront(Deque *D, ElemType *e) {return DeQueue(D, e); // 同普通队列的出队
}// 后端删除
bool PopRear(Deque *D, ElemType *e) {if (D->front == D->rear)return false; // 队列空D->rear = (D->rear - 1 + MAXQSIZE) % MAXQSIZE;*e = D->data[D->rear];return true;
}

最佳实践与注意事项

  1. ​循环队列的边界条件处理​

    • 特别注意取模运算的使用
    • 确保判空和判满条件正确
  2. ​内存管理​

    • 链队要及时释放出队结点的内存
    • 使用完毕后要销毁整个链队
  3. ​线程安全​

    • 在多线程环境中使用队列时需要添加同步机制
  4. ​错误处理​

    • 对可能失败的操作(如内存分配)进行适当处理
  5. ​性能优化​

    • 对于频繁操作的队列,可以考虑批量操作
    • 根据实际场景选择合适的队列实现方式
http://www.dtcms.com/a/614505.html

相关文章:

  • 远程(本地)连接不上虚拟机
  • Ubunntu24.04 下载jdk 8
  • SpringCache详细教学使用
  • 39Nginx的rewrite规则执行逻辑详解
  • C++—priority_queue/仿函数:优先级队列的使用及模拟实现
  • 做网站哪些dw使用模板做网站教程
  • 深圳市光明建设发展集团网站网站建设面谈话术
  • Java EE进阶5:Spring IoCDI
  • 中专生学历提升与职业发展指南
  • 易语言怎么反编译 | 如何通过反编译理解易语言的工作原理与破解技巧
  • 阿里国际站韩语网站怎么做百度帐号个人中心
  • EnsembleRetriever中的倒数融合排序算法
  • 网站客户端制作多少钱wordpress导出html
  • 银河麒麟高级服务器系统(V11)的安装部署实操保姆级教程
  • 202552读书笔记|《漫步在晴朗的日子里》——拥有一颗坚定的心去面对朝花夕拾,潮涨潮落
  • 物流查询网站开发青岛网站建设好不好
  • C#20、什么是LINQ
  • Springboot加盟平台推荐可视化系统ktdx2ldg(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 公网动态ip如何做网站网站项目建设周期
  • 路由器选择需关注无线传输速率、端口配置与信号覆盖
  • php网站建设论文答辩温州手机建站模板
  • 达梦的dbms_lock在DSC中能用吗
  • 前端微前端部署方案,Nginx与Webpack
  • 网站建站系统ps软件下载电脑版多少钱
  • c++ easylogging 使用示例
  • Holdout机制:推荐系统中评估部门级业务贡献的黄金标准
  • 地域性旅游网站建设系统结构品牌公司网站设计
  • 4k中国视频素材网站wordpress用哪个版本
  • 计算机网络应用层
  • 写资料的网站有哪些宽屏公司网站源码php