พอดีผมลองทำโจทย์ในแลป เรื่อง Circular Queue (คิวแบบวงกลม) ในส่วนอื่นของโจทย์คือผมทำเสร็จหมดแล้วครับ มาติดตรง Display ข้อมูลให้ออกมาตามในแลป ติดอยู่แค่ตรงนี้ที่เดียว ผมคิดไม่ออกจริงๆพยายามละครับ
โจทย์แลปครับ
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้ให้นักศึกษาเขียนโปรแกรมโดยใช้โครงสร้างข้อมูลและตัวดำเนินการของคิวแบบวงกลม (Circular Queue) โดย
โปรแกรมจะต้องสามารถ
>> Enqueue ข้อมูลที่อยู่ในคิวแบบวงกลมได้อย่างถูกต้อง พร้อมทั้งแสดงข้อมูลที่อยู่ในคิว และเมื่อคิวเต็มต้องแจ้ง
ผู้ใช้ว่า “Queue is full.”
>> Dequeue ข้อมูลที่อยู่ในคิวแบบวงกลมได้อย่างถูกต้อง พร้อมทั้งแสดงข้อมูลที่อยู่ในคิว และเมื่อคิวว่างเปล่า
ต้องแจ้งผู้ใช้ว่า “Queue is empty.”
Output ของโจทย์ ()
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: d
Queue is empty.
Queue: | | | |
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 45
Queue: |45| | |
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 55
Queue: |45|55| |
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: d
Dequeue Data = 45
Queue: | |55| |
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 65
Queue: | |55|65|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 75
Queue: |75|55|65|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Queue is full.
Queue: |75|55|65
Output ของผม
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: d
Queue is empty.
Queue: | | | |
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 45
Queue: |45|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 55
Queue: |45|55|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: d
Dequeue Data = 45
Queue: |55|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 65
Queue: |55|65|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Enqueue data: 75
Queue: |55|65|75|
------- Please Select Operations ---------
Press e: Enqueue
Press d: Dequeue
Press x: Exit Program
----------------------------------------------------
Select menu: e
Queue is full.
Queue: |55|65|75|
ตัวโค๊ดของผม
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้#include<stdio.h>
#include<stdlib.h>
#define SIZE 3
int item[SIZE];
int front = -1, rear =-1, c1=0, c2=0;
int isFull(){
if( (front == rear + 1) || (front == 0 && rear == SIZE-1)) return 1;
return 0;
}
int isEmpty(){
if(front == -1) return 1;
return 0;
}
void Enqueue(int element){
if(front == -1) front = 0;
rear = (rear + 1) % SIZE;
item[rear] = element;
}
int Dequeue(){
int element;
element = item[front];
if (front == rear){
front = -1;
rear = -1;
}
else{
front = (front + 1) % SIZE;
}
return(element);
}
void Display(){
int i;
if(isEmpty()) {
printf("| | | |");
}
else{
for(i = front; i!=rear; i=(i+1)%SIZE){
printf("|%d",item);
}
printf("|%d",item);
printf("|");
}
printf("\n\n");
}
/*void Display_Dequeue(){
int i, j;
if(isEmpty()) {
printf("| | | |");
}
else{
for(i = front; i!=rear; i=(i+1)%SIZE){
printf("|%d",item);
c2++;
}
printf("|%d",item);
if(c2!=3){
for(j=c2;j<3;j++){
printf("| ");
}
}
else{
printf("| ");
}
}
printf("\n\n");
}*/
int main(){
char select;
int input, i=0;
do{
printf(" ------- Please Select Operations ---------\n");
printf(" Press e: Enqueue\n");
printf(" Press d: Dequeue\n");
printf(" Press x: Exit Program\n");
printf(" ------------------------------------------\n");
printf(" Select menu: ");
fflush(stdin);
scanf("%c",&select);
switch(select){
case 'e':
if(isFull()){
printf(" Queue is full.\n");
}
else{
printf(" Enqueue data: ");
scanf("%d",&input);
Enqueue(input);
}
printf(" Queue: ");
Display();
break;
case 'd':
if(isEmpty()){
printf(" Queue is empty.\n");
}
else{
printf(" Dequeue Data = %d\n",item[front]);
Dequeue();
}
printf(" Queue: ");
Display();
break;
case 'x':
printf(" End Program...");
break;
default :
printf(" Wrong Choice !!\n\n");
}
}while(select != 'x');
}
รบกวนพี่ๆช่วยดูให้หน่อยนะครับขอบคุณล่วงหน้าครับ
Queue ภาษา C ผมแกะ Algorithm ตอน Display ไม่ออกจริงๆครับ แกะมาเป็นอาทิตย์ละครับ (ไม่ได้มาขอโค๊ดครับ)
โจทย์แลปครับ
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
Output ของโจทย์ ()
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
Output ของผม
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ตัวโค๊ดของผม
v
v
v
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
รบกวนพี่ๆช่วยดูให้หน่อยนะครับขอบคุณล่วงหน้าครับ