顺序队列的入队,出队,遍历队列计算队列的长度

该博客介绍如何使用C语言实现顺序队列,包括初始化队列、判断队列是否为空、入队、出队、遍历队列以及计算队列长度的函数实现,并提供了一个主函数示例来演示这些操作。
摘要由CSDN通过智能技术生成
#include "stdio.h"
#include "stdlib.h"
#define N 100
#define TRUE 1
#define FALSE 0
typedef struct queue{
int data[N];
int front, rear;
}*pqueue,lqueue;


//置空队列
int empty(pqueue p)
{

p->front = p->rear = 0;
printf("队列已经置空!\n");
return TRUE;
}


//判断队列是否为空
int isempty(pqueue p)
{
if (p->front == p->rear)
{
printf("队列为空!\n");
return FALSE;
}
else
printf("对列不为空!\n");
return TRUE;
}


//入队操作
int enqueue(pqueue p)
{
下面是 C 语言实现队列的代码,包括建立队列入队出队遍历队列的操作。 ```c #include <stdio.h> #include <stdlib.h> // 队列结点的结构体 typedef struct Node { int data; struct Node *next; } Node; // 队列结构体 typedef struct Queue { Node *front; // 队头指针 Node *rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = NULL; } // 入队 void enQueue(Queue *q, int data) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; if (q->rear == NULL) { q->front = q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; } } // 出队 int deQueue(Queue *q) { if (q->front == NULL) { printf("Queue is empty.\n"); return -1; } Node *p = q->front; int data = p->data; if (q->front == q->rear) { q->front = q->rear = NULL; } else { q->front = q->front->next; } free(p); return data; } // 遍历队列 void traverseQueue(Queue *q) { if (q->front == NULL) { printf("Queue is empty.\n"); return; } Node *p = q->front; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { Queue q; initQueue(&q); // 入队 enQueue(&q, 1); enQueue(&q, 2); enQueue(&q, 3); enQueue(&q, 4); // 遍历队列 traverseQueue(&q); // 出队 printf("deQueue: %d\n", deQueue(&q)); printf("deQueue: %d\n", deQueue(&q)); // 遍历队列 traverseQueue(&q); return 0; } ``` 以上代码,我们定义了 `Node` 结构体表示队列的结点,其包含一个整型数据成员和一个指向下一个结点的指针。我们还定义了 `Queue` 结构体表示队列,其包含指向队头和队尾的指针。接下来,我们分别实现了初始化队列入队出队遍历队列的操作。 在 `enQueue()` 函数,我们先创建一个新的结点,然后判断队列是否为空。如果队列为空,将新结点同时设为队头和队尾;否则将新结点插入到队尾,并更新队尾指针。 在 `deQueue()` 函数,我们先判断队列是否为空。如果队列为空,输出错误信息并返回 -1;否则从队头删除一个结点,并返回其数据值。如果队列只有一个结点,同时更新队头和队尾指针;否则只更新队头指针。 在 `traverseQueue()` 函数,我们先判断队列是否为空。如果队列为空,输出错误信息;否则从队头开始遍历整个队列,输出每个结点的数据值。 最后,在 `main()` 函数,我们首先调用 `initQueue()` 函数初始化队列,然后调用 `enQueue()` 函数入队四个元素。接着调用 `traverseQueue()` 函数遍历队列,并分别调用 `deQueue()` 函数出队两个元素。最后再调用 `traverseQueue()` 函数遍历队列一次,以验证入队出队操作的正确性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值