用 C 语言解释线性数据结构队列


数据结构是以结构化的方式组织数据的集合。它分为两种类型,如下所述:

  • 线性数据结构 - 数据以线性方式组织。例如,数组、结构体、栈、队列、链表。

  • 非线性数据结构 - 数据以分层方式组织。例如,树、图、集合、表。

队列

它是一种线性数据结构,其中插入操作在队尾进行,删除操作在队首进行。

队列的顺序是 FIFO - 先进先出

操作

  • 插入 - 将元素插入队列。
  • 删除 - 从队列中删除元素。

条件

  • 队列溢出 - 尝试将元素插入到已满的队列中。

  • 队列下溢 - 尝试从空队列中删除元素。

算法

以下是插入 ( ) 的算法:

  • 检查队列是否溢出。
if (r==n)
printf ("Queue overflow")
  • 否则,将元素插入队列。
q[r] = item
r++

以下是删除 ( ) 的算法:

  • 检查队列是否下溢。
if (f==r)
printf ("Queue under flow")
  • 否则,从队列中删除元素。
item = q[f]
f++

以下是显示 ( ) 的算法:

  • 检查队列是否为空。
if (f==r)
printf("Queue is empty")
  • 否则,打印从 'f' 到 'r' 的所有元素。
for(i=f; i<r; i++)
printf ("%d", q[i]);

程序

以下是使用数组实现队列的 C 程序:

 在线演示

#include<limits.h>
#include<stdio.h>
#include <stdlib.h>
struct Queue {
   int front, rear, size;
   unsigned capacity;
   int* array;
};
struct Queue* createQueue(unsigned capacity){
   struct Queue* queue = (struct Queue*)malloc(
   sizeof(struct Queue));
   queue->capacity = capacity;
   queue->front = queue->size = 0;
   queue->rear = capacity - 1;
   queue->array = (int*)malloc(
   queue->capacity * sizeof(int));
   return queue;
}
//if queue is full
int isFull(struct Queue* queue){
   return (queue->size == queue->capacity);
}
// Queue is empty
int isEmpty(struct Queue* queue){
   return (queue->size == 0);
}
void Equeue(struct Queue* queue, int item){
   if (isFull(queue))
      return;
   queue->rear = (queue->rear + 1)
   % queue->capacity;
   queue->array[queue->rear] = item;
   queue->size = queue->size + 1;
   printf("%d entered into queue
", item); } int Dqueue(struct Queue* queue){    if (isEmpty(queue))       return INT_MIN;    int item = queue->array[queue->front];    queue->front = (queue->front + 1)    % queue->capacity;    queue->size = queue->size - 1;    return item; } // Function to get front of queue int front(struct Queue* queue){    if (isEmpty(queue))       return INT_MIN;       return queue->array[queue->front];    }    // Function to get rear of queue    int rear(struct Queue* queue){       if (isEmpty(queue))          return INT_MIN;    return queue->array[queue->rear]; } int main(){    struct Queue* queue = createQueue(1000);    Equeue(queue, 100);    Equeue(queue, 200);    Equeue(queue, 300);    Equeue(queue, 400);    printf("%d is deleted element from queue

",    Dqueue(queue));    printf("1st item in queue is %d
", front(queue));    printf("last item in queue %d
", rear(queue));    return 0; }

输出

执行上述程序时,会产生以下结果:

100 entered into queue
200 entered into queue
300 entered into queue
400 entered into queue
100 is deleted element from queue
1st item in queue is 200
last item in queue 400

更新于: 2021-03-24

557 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.