行列是一种进步先出(FIFO)的数据构造,它在一般生活中有很多利用,如打印行列、任务调理等。在C言语中,行列可能经由过程多种方法实现,比方数组、链表跟栈。本指南将重点介绍怎样利用数组来创建跟操纵行列。
在实现行列之前,我们须要懂得以下基本操纵:
以下是利用数组实现行列的基本步调:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];
int front;
int rear;
int itemCount;
} Queue;
void createQueue(Queue *q) {
q->front = 0;
q->rear = -1;
q->itemCount = 0;
}
int enqueue(Queue *q, int data) {
if (q->itemCount >= MAXSIZE) {
printf("Queue is full, cannot insert element.\n");
return -1;
}
if (q->rear == MAXSIZE - 1) {
q->rear = 0;
}
q->data[q->rear] = data;
q->rear++;
q->itemCount++;
return 0;
}
int dequeue(Queue *q, int *data) {
if (q->itemCount <= 0) {
printf("Queue is empty, cannot delete element.\n");
return -1;
}
*data = q->data[q->front];
if (q->front == MAXSIZE - 1) {
q->front = 0;
}
q->front++;
q->itemCount--;
return 0;
}
int isEmpty(Queue *q) {
return q->itemCount == 0;
}
int isFull(Queue *q) {
return q->itemCount == MAXSIZE;
}
以下是一个完全的行列示例代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];
int front;
int rear;
int itemCount;
} Queue;
void createQueue(Queue *q) {
q->front = 0;
q->rear = -1;
q->itemCount = 0;
}
int enqueue(Queue *q, int data) {
if (q->itemCount >= MAXSIZE) {
printf("Queue is full, cannot insert element.\n");
return -1;
}
if (q->rear == MAXSIZE - 1) {
q->rear = 0;
}
q->data[q->rear] = data;
q->rear++;
q->itemCount++;
return 0;
}
int dequeue(Queue *q, int *data) {
if (q->itemCount <= 0) {
printf("Queue is empty, cannot delete element.\n");
return -1;
}
*data = q->data[q->front];
if (q->front == MAXSIZE - 1) {
q->front = 0;
}
q->front++;
q->itemCount--;
return 0;
}
int isEmpty(Queue *q) {
return q->itemCount == 0;
}
int isFull(Queue *q) {
return q->itemCount == MAXSIZE;
}
int main() {
Queue q;
createQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
int data;
while (!isEmpty(&q)) {
dequeue(&q, &data);
printf("Dequeued: %d\n", data);
}
return 0;
}
经由过程以上指南跟示例代码,你可能轻松地开端利用C言语创建跟操纵行列。跟着经验的积聚,你可能实验更高等的数据构造跟算法。