我對 C 編程比較陌生,我正在為我的一個班級開發一個復雜的專案。我需要知道我的函式 insertAfter 的定義是否按預期作業,以及我是否正確使用它。
void SeatNode::insertAfter(SeatNode* node)
{
// insert this->SeatNode after node
this->next_node = node->next_node;
node->next_node = this->next_node;
}
void Compact::createSeatReservation(Passenger p)
{
SeatNode seat(p);
seat.insertAfter(this->driver_seat.getNextNode());
}
如果它按預期作業,Compact::createSeatReservation(Passenger p) 應該創建一個名為seat 的SeatNode 物件,并且應該在名為driver_seat 的SeatNode 物件之后插入seat。形成一個以driver_seat為頭節點,seat為driver_seat之后的下一個節點的鏈表。正如我所說,我對 C 比較陌生,任何幫助都將不勝感激。
uj5u.com熱心網友回復:
不,它沒有。我將從您呼叫 insertAfter() 的那一點開始一步一步地完成它:
- 您將座位的下一個指標更改為駕駛員之后的指標,到目前為止一切順利。
- 您將 driver 的 next 指標更改為座位的 next 指標,也就是您在步驟 1 中更改為 driver 之后的指標,因此此分配不會更改任何內容。
您在第二個作業中要做的是將驅動程式的下一個指標更改為新插入的座位,您可以這樣做:
node->next_node = this;
createSeatReservation() 方法內部還有一個問題:當您對驅動程式之后的節點呼叫 insertAfter() 時,新座位將插入到驅動程式本身之后的座位之后。這里正確的行是:
seat.insertAfter(this->driver_seat);
所以完整的正確代碼是
void SeatNode::insertAfter(SeatNode* node)
{
// insert this->SeatNode after node
this->next_node = node->next_node;
node->next_node = this;
}
void Compact::createSeatReservation(Passenger p)
{
SeatNode seat(p);
seat.insertAfter(this->driver_seat);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314979.html
下一篇:函式(指標)作為引數
