行列是一种进步先出(FIFO)的数据构造,广泛利用于各种打算机顺序中,如任务调理、缓冲区管理、资本管理等。在C言语中,行列可能经由过程数组或链表实现。本文将介绍怎样利用C言语实现高效行列管理。
行列由一个牢固大小的数组或链表以及两个指针构成:队首指针(front)跟队尾指针(rear)。队首指针指向行列的第一个元素,队尾指针指向行列的最后一个元素的下一个地位。
#define QUEUE_MAX_SIZE 100
typedef struct {
int data[QUEUE_MAX_SIZE];
int front;
int rear;
} ArrayQueue;
void InitQueue(ArrayQueue *Q) {
Q->front = Q->rear = 0;
}
int EnQueue(ArrayQueue *Q, int element) {
if ((Q->rear + 1) % QUEUE_MAX_SIZE == Q->front) {
// 行列满
return -1;
}
Q->data[Q->rear] = element;
Q->rear = (Q->rear + 1) % QUEUE_MAX_SIZE;
return 0;
}
int DeQueue(ArrayQueue *Q, int *element) {
if (Q->front == Q->rear) {
// 行列空
return -1;
}
*element = Q->data[Q->front];
Q->front = (Q->front + 1) % QUEUE_MAX_SIZE;
return 0;
}
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} LinkedListQueue;
void InitQueue(LinkedListQueue *Q) {
Q->front = Q->rear = NULL;
}
void EnQueue(LinkedListQueue *Q, int element) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = element;
newNode->next = NULL;
if (Q->rear == NULL) {
Q->front = newNode;
Q->rear = newNode;
} else {
Q->rear->next = newNode;
Q->rear = newNode;
}
}
int DeQueue(LinkedListQueue *Q, int *element) {
if (Q->front == NULL) {
// 行列空
return -1;
}
Node *temp = Q->front;
*element = temp->data;
Q->front = Q->front->next;
if (Q->front == NULL) {
Q->rear = NULL;
}
free(temp);
return 0;
}
经由过程C言语实现行列管理,可能有效地对数据停止管理。在现实利用中,可能根据须要抉择利用数组或链表实现行列。本文介绍了利用数组实现轮回行列跟利用链表实现行列的基本方法,盼望对你有所帮助。