/*将进程控制块x加入队列q*/ void enqueue(PCB x,Queue *q) { Node *p=(Node *)malloc(NODE_LEN); (p->data).state=x.state; (p->data).super=x.super; (p->data).ndtime=x.ndtime; (p->data).runtime=x.runtime; (p->data).cpu=x.cpu; strcpy((p->data).qname,x.qname); p->next=0; if(q->front) q->rear->next=p; else q->front=p; q->rear=p; }
时间: 2023-05-12 10:06:41 浏览: 129
这是一个将进程控制块加入队列的函数,它接受两个参数,一个是进程控制块 x,另一个是队列 q。函数会为 x 创建一个节点,并将 x 的状态、优先级、需要时间、已运行时间、CPU 占用情况以及队列名称等信息存储在节点的数据域中。然后将节点加入队列的尾部,如果队列为空,则将节点作为队列的头节点。
相关问题
帮我用c++语言完善下列程序, #include <iostream> using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node; typedef struct { Node *front; Node *rear; }LinkQueue; void InitQueue( LinkQueue &Q ) {//初始化带头结点的空队列 } Status EnQueue( LinkQueue &Q,ElemType x) {// 入队 } Status DeQueue( LinkQueue &Q,ElemType ) {// 出队 } bool QueueEmpty(LinkQueue &Q) {//判队空 } void DestroyListQueue(LinkQueue &Q) {//销毁队列 }
完善后的程序如下:
```
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} LinkQueue;
void InitQueue(LinkQueue &Q) {//初始化带头结点的空队列
Q.front = Q.rear = new Node;
Q.front->next = NULL;
}
Status EnQueue(LinkQueue &Q, ElemType x) {// 入队
Node *p = new Node;
if (!p) {
return ERROR;
}
p->data = x;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue &Q, ElemType &x) {// 出队
if (Q.front == Q.rear) {
return ERROR;
}
Node *p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front;
}
delete p;
return OK;
}
bool QueueEmpty(LinkQueue &Q) {//判队空
return Q.front == Q.rear;
}
void DestroyListQueue(LinkQueue &Q) {//销毁队列
while (Q.front) {
Node *p = Q.front;
Q.front = Q.front->next;
delete p;
}
Q.rear = NULL;
}
```
在这个程序中,我们实现了一个带头结点的链式队列。其中,函数 `InitQueue` 用于初始化队列,函数 `EnQueue` 用于将元素入队,函数 `DeQueue` 用于将元素出队,并返回出队元素的值,函数 `QueueEmpty` 用于判断队列是否为空,函数 `DestroyListQueue` 用于销毁队列。
#include "binary_tree.h" #include<bits/stdc++.h> void HierarchyOrder(BiTreeNode* root) // 二叉树的层次遍历(队列实现) // 参数:二叉树根节点root // 输出:二叉树的层次遍历,中间没有空格,末尾不换行。 { queue<BiTreeNode*>q; q.push(root); if(root==NULL)return; while(!q.empty()){ BiTreeNode*node=q.front(); q.pop(); cout<<node->data; if(node->left!=NULL){ q.push(node->left); } if(node->right!=NULL){ q.push(node->right); } } }以上代码用C语言表达怎么写
以下是使用 C 语言表达的二叉树层次遍历代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left, *right;
} TreeNode;
typedef struct QueueNode {
TreeNode *treeNode;
struct QueueNode *next;
} QueueNode;
typedef struct {
QueueNode *front, *rear;
} Queue;
Queue *createQueue() {
Queue *q = (Queue *)malloc(sizeof(Queue));
q->front = NULL;
q->rear = NULL;
return q;
}
int isQueueEmpty(Queue *q) {
return q->front == NULL;
}
void enqueue(Queue *q, TreeNode *treeNode) {
QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode));
newNode->treeNode = treeNode;
newNode->next = NULL;
if (isQueueEmpty(q)) {
q->front = newNode;
} else {
q->rear->next = newNode;
}
q->rear = newNode;
}
TreeNode *dequeue(Queue *q) {
if (isQueueEmpty(q)) {
return NULL;
}
TreeNode *treeNode = q->front->treeNode;
QueueNode *tempNode = q->front;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(tempNode);
return treeNode;
}
void levelOrder(TreeNode *root) {
if (root == NULL) {
return;
}
Queue *q = createQueue();
enqueue(q, root);
while (!isQueueEmpty(q)) {
TreeNode *node = dequeue(q);
printf("%d", node->data);
if (node->left != NULL) {
enqueue(q, node->left);
}
if (node->right != NULL) {
enqueue(q, node->right);
}
}
}
int main() {
// 构造一棵二叉树
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->data = 1;
root->left = (TreeNode *)malloc(sizeof(TreeNode));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode *)malloc(sizeof(TreeNode));
root->right->data = 3;
root->right->left = (TreeNode *)malloc(sizeof(TreeNode));
root->right->left->data = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode *)malloc(sizeof(TreeNode));
root->right->right->data = 5;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 层次遍历
levelOrder(root);
return 0;
}
```
这段代码使用了队列的方式实现二叉树的层次遍历。首先定义了一个 Queue 结构体来实现队列的操作,其中包括了 enqueue、dequeue、isQueueEmpty 等基本操作。然后定义了一个 levelOrder 函数来进行层次遍历,其中也是使用队列来实现的。最后在主函数中构造了一棵二叉树,并进行层次遍历。
阅读全文