糟糕,快沒梗了QQ 這樣真的可以 30 天嗎?
延續昨天文章,今天改使用 linked-list 來實現 queue
題目直接複製課本(增加被搜尋機率?)
Show how to implement a queue or stack using a linked list.
一樣先上 linked-list 的圖,並開始複習一下 queue
佇列 (queue) 其操作方式為從尾端推入,從頭端推出,是一種 FIFO (First-In, First-Out) 的資料結構。如同排隊般的資料結構。
先定義 linked-list
struct node {
int data;
struct node *next;
};
因為 Queue 需要知道隊伍前與隊伍後的資料,所以需要多宣告一個 pointer 記錄「最後一個node」。
並且多宣告一個 temp 當暫存
struct node* front = nullptr;
struct node* back = nullptr;
struct node* temp;
Enqueue 的部份:
在使用 Push 將元素插入 queue 時。如果目前的 back 為 nullptr,表示 queue 為空,因此宣告並插入 val。
否則,就在後方插入 val,並將該節點設置為 back。
void Enqueue() {
int val;
cout<<"Insert the element in queue : "<<endl;
cin>>val;
if (back == nullptr) {
back = (struct node *)malloc(sizeof(struct node));
back->next = nullptr;
back->data = val;
front = back;
} else {
temp=(struct node *)malloc(sizeof(struct node));
back->next = temp;
temp->data = val;
temp->next = nullptr;
back = temp;
}
}
Dequeue 的部份:
在使用 pop 將元素 dequeue 時,如果 queue 中沒有元素,則回傳 underflow。
如果 queue 中只有一個元素,將該元素刪除後,需要將 front 跟 back 設置為 NULL。
其他就當將刪除前面的元素時,將 front 的元素指向下一個元素而已。
void Dequeue() {
temp = front;
if (front == nullptr) {
cout<<"Underflow"<<endl;
return;
} else
if (temp->next != nullptr) {
temp = temp->next;
cout<<"Element deleted from queue is : "<<front->data<<endl;
free(front);
front = temp;
} else {
cout<<"Element deleted from queue is : "<<front->data<<endl;
free(front);
front = nullptr;
back = nullptr;
}
}
#資料結構不難,找到 code 而已
參考:https://www.tutorialspoint.com/cplusplus-program-to-implement-queue-using-linked-list