Queue

mail@pastecode.io avatar
unknown
c_cpp
a year ago
1.9 kB
3
Indexable
#include <stdio.h>
#define MAX 7

typedef struct {
int queue[MAX];
int front, rear;
} QUEUE; //queue là cấu trúc gồm 1 mảng queue với kích thước tối đa là max, front rear để theo dõi đầu và đuôi của hàng đợi (queue)

void init(QUEUE *q) //đây là hàng đợi rỗng ban đầu
{
  q->front = 0;
  q->rear = -1;
}

int isEmpty(QUEUE q) //kiểm tra xem hàng đợi có rỗng hay không
{ 
  return q.front > q.rear; 
}

int isFull(QUEUE q) 
{
    return q.rear == MAX - 1; //kiểm tra xem hàng đợi có đầy hay không
}

void enqueue(QUEUE *q, int x) { //thêm phần tử 'x' vào hàng đợi
  if (isFull(*q))
  {
      printf("Hàng đợi đầy\n");
  }
  else 
  {
      q->rear++; //tăng phần tử đuôi lên 1
      q->queue[q->rear] = x; //gán phần tử đuôi (rear) ở chỗ hàng đợi (queue) vào biến x trong mảng queue
  }
}

int dequeue(QUEUE *q) { //lấy phần tử ra khỏi hàng đợi
  if (isEmpty(*q)) 
  {
    printf("Hàng đợi trống\n");
    return -1;
  } 
  else 
  {
    int x = q->queue[q->front]; 
    q->front++; //tăng front 
    return x;
  }
}

void display(QUEUE q) { //hiển thị hàng đợi (queue), in ra
  if (isEmpty(q)) 
  {
    printf("Hàng đợi trống\n");
  }
  else 
  {
    for (int i = q.front; i <= q.rear; i++) //vòng lặp for
    printf("%d ", q.queue[i]); //giá trị của phần tử tại vịtrí i
    printf("\n");
  }
}

int main() {
    QUEUE q; //tạo hàng đợi rồi khởi tạo bằng init
    init(&q);
    int element;
    printf("Nhập phần tử vào hàng đợi queue (nhập 0 để dừng):\n");
    while (1) {
        scanf("%d", &element);
        if (element == 0)
            break;
        enqueue(&q, element);
    }
    display(q);
    printf("Phần tử bị loại bỏ là: %d\n", dequeue(&q));
    display(q);
    return 0;
}
Leave a Comment