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