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

网站排名优化软件学校网站建设调查表

网站排名优化软件,学校网站建设调查表,功能性的网站建设,网站修改域名服务器1 静态数组队列 循环队列通常使用数组来实现,判别循环队列是否满或空,可以借助两个变量front和rear。 判空:当front和rear相等时,队列为空。 判满:当(front 1) % n rear时,队列为满,其中n为…

1 静态数组队列

循环队列通常使用数组来实现,判别循环队列是否满或空,可以借助两个变量front和rear。

  1. 判空:当front和rear相等时,队列为空。

  2. 判满:当(front + 1) % n = rear时,队列为满,其中n为循环队列的长度。需要注意的是,为了区分队列满和队列空的情况,队列中必须要有一个空间不存储元素。

下面是一个简单的循环队列的实现示例:

#define MAXSIZE 10 // 定义循环队列的最大容量typedef struct {int data[MAXSIZE]; // 存储队列元素int front; // 队头指针int rear; // 队尾指针
} CircularQueue;// 初始化循环队列
void initCircularQueue(CircularQueue *q) {q->front = q->rear = 0;
}// 判断循环队列是否为空
bool isEmpty(CircularQueue *q) {return q->front == q->rear;
}// 判断循环队列是否已满
bool isFull(CircularQueue *q) {return (q->rear + 1) % MAXSIZE == q->front;
}

在实现过程中,需要留出一位空间来区分队列为满和队列为空的情况。这里我们设置循环队列的最大容量为MAXSIZE,因此循环队列的存储空间实际上是MAXSIZE-1。当队尾指针rear指向数组最后一个位置时,如果再插入一个元素就会导致rear指向第一个位置,此时队列为满;而当队头指针front和队尾指针rear相同时,队列为空。

2 动态数组队列

动态数组队列是一种数据结构,在队列的基础上,使用动态数组来实现队列的操作。它允许在队列中添加和删除元素,具有先进先出(FIFO)的特点。

在动态数组队列中,元素存储在数组中,并通过一个指针来跟踪队列的头部和尾部。当队列长度增长时,内部数组也随之扩容。相反,当队列长度减小,内部数组也会缩小以减少内存占用。

动态数组队列的时间复杂度如下:

  • 入队:O(1) 或 O(n)(需要扩容)
  • 出队:O(1)
  • 获取队列大小:O(1)

需要注意的是,当需要频繁添加和删除元素时,使用动态数组队列比静态数组队列更加高效。但对于需要快速访问队列任意位置的应用,链表队列可能更适合。

#include <stdio.h>
#include <stdlib.h>// 定义队列结构体
typedef struct queue {int *data;      // 存储队列元素的数组指针int front;      // 队头下标int rear;       // 队尾下标int size;       // 队列大小int capacity;   // 队列容量
} Queue;// 初始化队列
void initQueue(Queue *queue, int capacity) {// 申请存储队列元素的数组空间queue->data = (int*) malloc(sizeof(int) * capacity);if (!queue->data) {printf("Memory allocation failed.\n");exit(1);}// 初始化队列参数queue->front = 0;queue->rear = -1;queue->size = 0;queue->capacity = capacity;
}// 判断队列是否为空
int isEmpty(Queue *queue) {return queue->size == 0;
}// 判断队列是否已满
int isFull(Queue *queue) {return queue->size == queue->capacity;
}// 入队
void enqueue(Queue *queue, int element) {if (isFull(queue)) {printf("Queue is full.\n");return;}// 计算新的队尾下标int newRear = (queue->rear + 1) % queue->capacity;queue->data[newRear] = element;queue->rear = newRear;queue->size++;
}// 出队
int dequeue(Queue *queue) {if (isEmpty(queue)) {printf("Queue is empty.\n");return -1;}int element = queue->data[queue->front];queue->front = (queue->front + 1) % queue->capacity;queue->size--;return element;
}// 打印队列元素
void printQueue(Queue *queue) {if (isEmpty(queue)) {printf("Queue is empty.\n");return;}printf("Queue elements: ");for (int i = 0; i < queue->size; i++) {int index = (queue->front + i) % queue->capacity;printf("%d ", queue->data[index]);}printf("\n");
}// 销毁队列
void destroyQueue(Queue *queue) {free(queue->data);
}int main() {Queue queue;initQueue(&queue, 5);// 入队enqueue(&queue, 1);enqueue(&queue, 2);enqueue(&queue, 3);enqueue(&queue, 4);enqueue(&queue, 5);printQueue(&queue);     // 队列元素: 1 2 3 4 5// 出队dequeue(&queue);dequeue(&queue);printQueue(&queue);     // 队列元素: 3 4 5// 入队enqueue(&queue, 6);enqueue(&queue, 7);printQueue(&queue);     // 队列元素: 3 4 5 6 7destroyQueue(&queue);return 0;
}

链式队列

#include <stdio.h>
#include <stdlib.h>// 定义队列结构体
typedef struct node {int data; // 数据域struct node *next; // 指针域,指向下一个节点
} Node;// 定义队列结构体,包含头节点和尾节点
typedef struct queue {Node *front; // 头节点Node *rear; // 尾节点
} Queue;// 初始化队列
Queue *init() {Queue *q = (Queue*)malloc(sizeof(Queue)); // 创建队列内存空间Node *p = (Node*)malloc(sizeof(Node)); // 创建头节点内存空间p->next = NULL;q->front = p; // 队列的头指针指向头节点q->rear = p; // 队列的尾指针也指向头节点return q;
}// 入队操作
void enqueue(Queue *q, int data) {Node *p = (Node*)malloc(sizeof(Node)); // 创建新节点内存空间p->data = data;p->next = NULL;q->rear->next = p; // 将新节点接到队列尾部q->rear = p; // 更新队列尾指针
}// 出队操作
int dequeue(Queue *q) {if (q->front == q->rear) { // 队列为空printf("queue is empty\n");return -1;}Node *p = q->front->next;int data = p->data;q->front->next = p->next; // 将头节点指向下一个节点,相当于删除了队列中的第一个节点if (q->rear == p) { // 如果队列中只有一个元素,出队后需要更新尾节点指针q->rear = q->front;}free(p); // 释放被删除节点内存空间return data;
}// 获取队列长度
int length(Queue *q) {int len = 0;Node *p = q->front->next;while (p != NULL) {len++;p = p->next;}return len;
}// 打印队列
void print(Queue *q) {Node *p = q->front->next;printf("queue: ");while (p != NULL) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main() {Queue *q = init(); // 初始化队列enqueue(q, 1); // 入队操作enqueue(q, 2);enqueue(q, 3);print(q); // 打印队列dequeue(q); // 出队操作print(q); // 打印队列printf("queue length: %d\n", length(q)); // 获取队列长度return 0;
}
http://www.yayakq.cn/news/683250/

相关文章:

  • WordPress网站转APP插件优化大师有必要花钱吗
  • 景观设计师做交通分析常用网站培训机构哪家最好
  • 做网站策划用什么软件网站 服务器 域名
  • 江西响应式网站建设哪家好做简单视频网站自己看
  • 南部 网站 建设浙江省建设项目招投标网站
  • 云龙网站开发做网站怎么做多少钱
  • 邯郸菜鸟网站建设会员管理系统怎么做
  • 哪些网站是用asp.net开发的网站开发合同范本大全
  • 河南网站优化要多少钱电商设计公司有哪些
  • wordpress小图标网站2345应用商店
  • 丹阳网站优化网页界面设计的理念
  • 营销型网站制作wordpress 资源
  • 企业建设网站的作用昆明网站建设制作
  • 网站建设需要什么软件做美食下载什么网站
  • 邵阳网站建设多少钱网站悬浮窗广告
  • 旅游网站开发工具北京手机建站模板
  • 延庆上海网站建设凡科用模板做网站
  • 重庆市建设工程信息官方网站网站开发工具 下载
  • 哪个专业是学网站开发的深圳网站建设金瓷网络
  • 中国建设银行预约网站首页网站开发用什么框架合适
  • 我想做一个小网站搞页游该怎么做北京页面设计的培训
  • 风雨同舟 网站建设wordpress大学 永久链接
  • 响应式网站设计公司松岗做网站
  • 网站维护页面模版注册公司一般需要多少钱
  • 网站建设资质电商网站的相同点
  • 建设网站租服务器工商局网站怎么做增项
  • 织梦做的网站后台登录阿里巴巴网站费用怎么做分录
  • 武威网站制作公司哪个好做网站要收订金吗
  • 网站设计确认电商网站设计系列
  • 做网站费用入什么科目简约大气网站