noo-mai-binpaibinma wrote:
พี่น้อง....
ใครแฮปปี้ ใจดี มาเฉลยข้อสอบให้ดูหน่อยสิ
ใครใจดี มาตอบด้วยนะ เป็นพระคุณอย่างสูง
ขอให้ท่านเก็ท เอ สาธุ _/\_
เค้าไม่แฮปปี้อ่ะ เค้าวันทูคอล+ทรูมูฟ+ฮัท+PCT+โทรศัพท์สาธารณะ ได้ไหมอ่ะ ^^
ข้อแรก เขียนฟังก์ชันนับจำนวนโหนดในลิตต์
step to step
1.สร้าง temp ชี้ไปที่เดียวกับ head ด้วยคำสั่ง Node* temp=head;
2.วนลูบด้วยเงื่อนไขเป็นจริง while(1) ซึ่งภายในลูบมีการทำงานดังนี้
2.1 ภายในลูบให้นับค่า count++ จากนั้นให้ทำการเลื่อน temp ไปยังโหนต่อไปด้วยคำสั่ง temp=temp->next;
2.2 if( temp->next==NULL) {count++; break;} ถ้าโหนดต่อไปที่ temp ชี้เท่ากับ NULL ให้นับค่า count ก่อนที่จะออกจากลูบ
3.return ค่าออกมา
exception
1.ถ้าลิตต์นั้นมีแค่โหนดเดียว
2.ถ้าลิตต์นั้นไม่มีโหนดสักตัว
----------------------------------------------------------------------
ข้อสอง เขียนฟังก์ชัน ลบโหนดตัวที่สอง ของลิตต์ชนิดสองทิศทาง (double linklist - two ways)
step to step
1.สร้าง temp ชี้ไปที่โหนดถัดไปของ head นั้นก็คือ โหนดตัวที่สองนั่นเอง ด้วยคำสั่ง Node* temp=head->next;
2.เมื่อ temp ชี้ไปที่โหนดตัวที่สองแล้ว ก็ให้ทำการเชื่อม "โหนดที่ head ชี้ กับ โหนดถัดไปที่ temp ชี้" (โหนดตัวที่แรก กับโหนดตัวที่สาม)
2.1 head->next=temp->next;
2.2 temp->next->prev=head;
3.เมื่อมั่นใจว่าโหนดทั้งสองเชื่อมกันแล้ว ก็ให้ทำการลบโหนดตัวที่สองด้วยคำสั่ง delete temp; โหนดตัวที่สองก็จะถูกลบแล้วคืนทรัพยากรเครื่องต่อไป
exception
1.ถ้าลิตต์นั้นมีแค่โหนดเดียว
2.ถ้าลิตต์นั้นไม่มีโหนดสักตัว
----------------------------------------------------------------------
ข้อสาม สั่งเอาท์พุต ข้อมูลทั้งลิตต์ โดยเอาท์พุตที่ออกมานั้นจะสลับกันออกมาระหว่างหัวกับหาง เช่น 1 2 3 4 5 ผลที่ได้ต้องเป็น 1 5 2 4 3
step to step
1.สร้าง pHead ชี้ไปที่เดียวกับ head สร้าง pTail ชี้ไปที่เดียวกับ tail ด้วยคำสั่ง Node* pHead=head; Node* pTail=Tail;
2.วนลูบด้วยเงื่อนไขเป็นจริง while(1) ซึ่งภายในลูบมีการทำงานดังนี้
2.1 if(door==0) {cout << pHead << endl; pHead=pHead->next; door=1; } ถ้า door=0 ให้เอาธ์พุทค่าที่ pHead ชี้ จากนั้นให้เลื่อนไปยังโหนดต่อไปและให้ค่า door=1
2.2 if(door==1) {cout << pTail << endl; pTail=pHead->next; door=0 } ถ้า door=0 ให้เอาธ์พุทค่าที่ pTail ชี้ จากนั้นให้เลื่อนไปยังโหนดต่อไปและให้ค่า door=0
2.3 if(pHead==pTail) {cout << pTail << endl; break;} ตรวจสอบว่า pHead ชี้ทีเดียวกับ pTail หรือเปล่า ถ้าใช่ก็ให้เอาธ์พุทค่าที่ pTail ชี้ จากนั้นให้หลุดลูบออกไปเลย
exception
1.ถ้าลิตต์นั้นมีแค่โหนดเดียว
2.ถ้าลิตต์นั้นไม่มีโหนดสักตัว
----------------------------------------------------------------------
ข้อที่ 6 ตอนที่ 2 ให้เขียนฟังก์ชันทำให้คิวมีแต่ข้อมูลที่มีค่ามากกว่า 30 โดยห้ามสร้างคิวใหม่ และคิวนั้นต้องเรียงลำดับค่าเหมือนเดิม
ด้วยโจทย์กำหนดฟังก์ชันมีพารามิเตอร์ 1 ตัว คือ aQueue ซึ่งเป็นคิวดังกล่าว และกำหนดให้ให้มีฟังกชั่น Length() สำหรับรีเทิน์ค่า จำนวนสมาชิกของคิว
step to step
pre condition : สร้างตัวแปร int index=-1; สำหรับเป็นตัวระบุ index ของอาเรย์ตัวเลขที่ชื่อว่า data
1.สร้างอาเรย์ตัวเลขมาเก็บค่าในคิวทั้งหมด int data = new data[aQueue.Length] ใช้เทคนิคการขอใช้พื้นที่ Heap เพื่อช่วยประหยัดทรัพยากรของเครื่อง
2.ใช้วนลูบฟอร์ เพื่อดึงค่าทั้งหมดในคิวลงในอาเรย์ตัวเลข data ที่เราสร้างไว้ ด้วยเงื่อนไข for(int i=0;i<aQueue.Length;i++) โดยในลูบมีการทำงานดังนี้
2.1 data[++index] = aQueue.Dequeue(); ดึงค่าออกมาจากคิวทีละจำนวนโดยใส่ในอาเรย์ data ดังกล่าว
2.2 if(data[index]<30) {index--;} เช็คว่าค่าที่อยู่ในอาเรย์ data ที่ตำแหน่ง index นั้นมีค่าน้อยกว่า 30 หรือเปล่า ถ้าใช่ก็ให้ค่า index=index-1;
2.3 เหตุผลที่ index-- นั้น คือ ถ้าลูบรอบนี้ data[index]<30 ให้ลดค่า index ลงมาหนึ่งตำแหน่ง พอวนลูบรอบต่อไป ถ้าข้อมูลมากกว่า 30 ก็จะทับข้อมูลในตำแหน่งนี้เลย
3.ใช้ลูบฟอร์ เพื่อส่งค่าทั้งหมดในอาเรย์ตัวเลข data นี้ไปเก็บในคิว aQueue ด้วยเงื่อนไข for(int i=0;i<aQueue.Length;i++) โดยในลูบมีการทำงานดังนี้
3.1 aQueue.enqueue(data[i]);
4.หลังจากทำงานเสร็จหมดแล้ว ให้ทำการลบอาเรย์ตัวเลข data ที่ใช้พื้นที่ Heap อยู่ เพื่อคืนทรัพยากรให้เครื่องต่อไป ด้วยคำสั่ง delete [] data;
exception
1.ถ้าคิวนี้มีสมาชิกเพียงตัวเดียว
2.ถ้าคิวนี้ไม่มีสมาชิกเลย
----------------------------------------------------------------------
จบข่าว ผิดถูกประการใดก็ขออภัยด้วยนะจ๊ะ เผอิญตอนทำข้อสอบ ง่วงนอนมากมาย ^^
ป.ล.ใน C++ เรียกฟังก์ชัน ไม่ใช่ เมธอด นะจ๊ะ
ป.ล.2 การขอใช้พื้นที่ Heap ทุกครั้ง เมื่อเลิกใช้งานแล้ว ต้องทำการลบ เพื่อคืนทรัพยากรให้เครื่องเสมอ
ป.ล.3 ใครอยากได้โค๊ดไปศึกษา ติดต่อขอมาได้เลยนะ
ป.ล.4 ฉันจะถูกอาจารย์ในภาควิชาคอมเล่นไหมเนี้ย T^T