用 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告