Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การใช้ Linked List Implement Queue ในภาษา C

Queue ด้วย Linked List: กัน Overflow/Underflow ได้

โครงสร้างโหนด: struct node { int info; struct node *ptr; } มี pointer front (หัว) และ rear (ท้าย)

Operations

  • Enqueue (Insert): สร้างโหนดใหม่ ผูกที่ rear
  • Dequeue (Delete): ถอดโหนดที่ front
  • Display: วนจาก front ถึง rear

โค้ด C สมบูรณ์ (พร้อมเมนู)

#include <stdio.h>
#include <stdlib.h>

struct node {
    int info;
    struct node *ptr;
} *front, *rear, *temp, *front1;

int frontelement();
void enq(int data);
void deq();
void display();
void create();

int count = 0;

void main() {
    int no, ch, e;
    printf("\n 1 - Enqueue");
    printf("\n 2 - Dequeue");
    printf("\n 3 - Display");
    printf("\n 4 - Exit");
    printf("\n 5 - Front");
    create();
    while (1) {
        printf("\n Enter choice : ");
        scanf("%d", &ch);
        switch (ch) {
            case 1: printf("Enter data : "); scanf("%d", &no); enq(no); break;
            case 2: deq(); break;
            case 3: display(); break;
            case 4: exit(0);
            case 5: e = frontelement(); if (e != 0) printf("Front element : %d", e); else printf("\n No front element in Queue"); break;
            default: printf("Wrong choice, Try again ");
        }
    }
}

void enq(int data) {
    if (rear == NULL) {
        rear = (struct node *)malloc(1 * sizeof(struct node));
        rear->ptr = NULL;
        rear->info = data;
        front = rear;
    } else {
        temp = (struct node *)malloc(1 * sizeof(struct node));
        rear->ptr = temp;
        temp->info = data;
        temp->ptr = NULL;
        rear = temp;
    }
    count++;
}

void display() {
    front1 = front;
    if ((front1 == NULL) && (rear == NULL)) {
        printf("Queue is empty");
        return;
    }
    while (front1 != rear) {
        printf("%d ", front1->info);
        front1 = front1->ptr;
    }
    if (front1 == rear)
        printf("%d", front1->info);
}

void deq() {
    front1 = front;
    if (front1 == NULL) {
        printf("\n Error");
        return;
    } else if (front1->ptr != NULL) {
        front1 = front1->ptr;
        printf("\n Dequeued value : %d", front->info);
        free(front);
        front = front1;
    } else {
        printf("\n Dequeued value : %d", front->info);
        free(front);
        front = NULL;
        rear = NULL;
    }
    count--;
}

int frontelement() {
    if ((front != NULL) && (rear != NULL))
        return(front->info);
    else
        return 0;
}

ตัวอย่าง Output

1 - Enque
2 - Deque
3 – Display
4 - Exit
5 - Front element
Enter choice: 1
Enter data: 14
Enter choice: 1
Enter data: 85
Enter choice: 1
Enter data: 38
Enter choice: 5
Front element: 14
Enter choice: 3
14 85 38
Enter choice: 2
Dequeued value: 14
Enter choice: 3
Enter choice: 4