c语言队列实现代码 C语言队列实现代码详解
队列是一种常见的数据结构,它遵循先进先出(First In First Out,FIFO)的原则。在C语言中,可以通过数组或链表来实现队列。下面我们将分别介绍这两种实现方式。
1. 数组实现队列
数组实现队列的基本思想是使用一个固定大小的数组来存储数据元素,并使用两个指针front和rear分别指向队头和队尾。初始化时,front和rear都指向数组的第一个元素。入队操作时,将元素插入rear指向的位置,并将rear后移一位;出队操作时,将front指向的元素移除,并将front后移一位。需要注意的是,当rear指向数组末尾时,再有元素入队时需要进行循环处理。
下面是使用数组实现队列的示例代码:
```c
#include
#define SIZE 100
int queue[SIZE];
int front -1;
int rear -1;
int isEmpty()
{
if (front -1 || front > rear)
return 1;
else
return 0;
}
int isFull()
{
if (rear SIZE - 1)
return 1;
else
return 0;
}
void enqueue(int data)
{
if (isFull())
printf("Queue is full.
");
else
{
if (front -1)
front 0;
rear ;
queue[rear] data;
}
}
int dequeue()
{
if (isEmpty())
{
printf("Queue is empty.
");
return -1;
}
else
{
int data queue[front];
front ;
return data;
}
}
int main()
{
enqueue(1);
enqueue(2);
enqueue(3);
printf("%d
", dequeue());
printf("%d
", dequeue());
printf("%d
", dequeue());
return 0;
}
```
2. 链表实现队列
链表实现队列的基本思想是使用一个单向链表来存储数据元素,并使用两个指针front和rear分别指向队头和队尾。初始化时,front和rear都指向NULL。入队操作时,将新节点插入rear指向节点的后面,并将rear指向新节点;出队操作时,将front指向的节点移除,并将front后移一位。需要注意的是,当链表为空时,front和rear都应该指向NULL。
下面是使用链表实现队列的示例代码:
```c
#include
#include
struct Node
{
int data;
struct Node* next;
};
struct Node* front NULL;
struct Node* rear NULL;
int isEmpty()
{
if (front NULL)
return 1;
else
return 0;
}
void enqueue(int data)
{
struct Node* newNode (struct Node*) malloc(sizeof(struct Node));
newNode->data data;
newNode->next NULL;
if (isEmpty())
{
front newNode;
rear newNode;
}
else
{
rear->next newNode;
rear newNode;
}
}
int dequeue()
{
if (isEmpty())
{
printf("Queue is empty.
");
return -1;
}
else
{
struct Node* temp front;
int data temp->data;
front front->next;
free(temp);
return data;
}
}
int main()
{
enqueue(1);
enqueue(2);
enqueue(3);
printf("%d
", dequeue());
printf("%d
", dequeue());
printf("%d
", dequeue());
return 0;
}
```
以上是C语言中队列的两种常见实现方式:数组和链表。通过对代码的详细解析,我们可以更好地理解队列的原理和操作过程,从而能够灵活运用队列解决实际问题。希望本文能对读者有所帮助。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。