排队逻辑是一般生活中罕见的景象,如银行排队、超市结账等。在打算机科学中,行列是一种重要的数据构造,用于实现排队逻辑。本文将介绍行列的基本不雅点、C言语实现以及怎样利用行列处理现实成绩。
行列(Queue)是一种进步先出(FIFO)的数据构造,它容许在表的一端拔出元素(称为队尾),在另一端删除元素(称为队头)。
行列可能利用数组或链表来实现。
以下是一个利用数组实现的行列示例:
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void InitQueue(Queue *q) {
q->front = q->rear = 0;
}
int IsEmpty(Queue *q) {
return q->front == q->rear;
}
int IsFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void EnQueue(Queue *q, int value) {
if (IsFull(q)) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int DeQueue(Queue *q) {
if (IsEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
以下是一个利用链表实现的行列示例:
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} Queue;
void InitQueue(Queue *q) {
q->front = q->rear = NULL;
}
int IsEmpty(Queue *q) {
return q->front == NULL;
}
void EnQueue(Queue *q, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (IsEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
int DeQueue(Queue *q) {
if (IsEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
Node *temp = q->front;
int value = temp->data;
q->front = q->front->next;
free(temp);
return value;
}
以下是一个利用行列实现银行排队体系的示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void InitQueue(Queue *q) {
q->front = q->rear = 0;
}
int IsEmpty(Queue *q) {
return q->front == q->rear;
}
int IsFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void EnQueue(Queue *q, int value) {
if (IsFull(q)) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int DeQueue(Queue *q) {
if (IsEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
int main() {
Queue queue;
InitQueue(&queue);
EnQueue(&queue, 1);
EnQueue(&queue, 2);
EnQueue(&queue, 3);
printf("DeQueue: %d\n", DeQueue(&queue));
printf("DeQueue: %d\n", DeQueue(&queue));
return 0;
}
本文介绍了行列的基本不雅点、C言语实现以及怎样利用行列处理现实成绩。经由过程进修行列,可能帮助你更好地懂得数据构造跟编程头脑,为后续进修其他数据构造跟算法打下基本。