refactor: Replace poll with pop in Queue and Deque (#415)
@ -67,8 +67,8 @@ void push(ArrayQueue *queue, int num) {
|
|||||||
queue->queSize++;
|
queue->queSize++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
void poll(ArrayQueue *queue) {
|
void pop(ArrayQueue *queue) {
|
||||||
int num = peek(queue);
|
int num = peek(queue);
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
queue->front = (queue->front + 1) % queue->queCapacity;
|
queue->front = (queue->front + 1) % queue->queCapacity;
|
||||||
@ -106,8 +106,8 @@ int main() {
|
|||||||
printf("队首元素 peek = %d\r\n", peekNum);
|
printf("队首元素 peek = %d\r\n", peekNum);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
poll(queue);
|
pop(queue);
|
||||||
printf("出队元素 poll = %d,出队后 queue = ", peekNum);
|
printf("出队元素 pop = %d,出队后 queue = ", peekNum);
|
||||||
printArrayQueue(queue);
|
printArrayQueue(queue);
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
@ -121,7 +121,7 @@ int main() {
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
push(queue, i);
|
push(queue, i);
|
||||||
poll(queue);
|
pop(queue);
|
||||||
printf("第 %d 轮入队 + 出队后 queue = ", i);
|
printf("第 %d 轮入队 + 出队后 queue = ", i);
|
||||||
printArrayQueue(queue);
|
printArrayQueue(queue);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
int pollFirst() {
|
int popFirst() {
|
||||||
int num = peekFirst();
|
int num = peekFirst();
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
front = index(front + 1);
|
front = index(front + 1);
|
||||||
@ -81,7 +81,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
int pollLast() {
|
int popLast() {
|
||||||
int num = peekLast();
|
int num = peekLast();
|
||||||
queSize--;
|
queSize--;
|
||||||
return num;
|
return num;
|
||||||
@ -139,11 +139,11 @@ int main() {
|
|||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque->pollLast();
|
int popLast = deque->popLast();
|
||||||
cout << "队尾出队元素 = " << pollLast << ",队尾出队后 deque = ";
|
cout << "队尾出队元素 = " << popLast << ",队尾出队后 deque = ";
|
||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
int pollFirst = deque->pollFirst();
|
int popFirst = deque->popFirst();
|
||||||
cout << "队首出队元素 = " << pollFirst << ",队首出队后 deque = ";
|
cout << "队首出队元素 = " << popFirst << ",队首出队后 deque = ";
|
||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
void poll() {
|
void pop() {
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
front = (front + 1) % queCapacity;
|
front = (front + 1) % queCapacity;
|
||||||
@ -102,8 +102,8 @@ int main() {
|
|||||||
cout << "队首元素 peek = " << peek << endl;
|
cout << "队首元素 peek = " << peek << endl;
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
queue->poll();
|
queue->pop();
|
||||||
cout << "出队元素 poll = " << peek << ",出队后 queue = ";
|
cout << "出队元素 pop = " << peek << ",出队后 queue = ";
|
||||||
PrintUtil::printVector(queue->toVector());
|
PrintUtil::printVector(queue->toVector());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
@ -117,7 +117,7 @@ int main() {
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
queue->push(i);
|
queue->push(i);
|
||||||
queue->poll();
|
queue->pop();
|
||||||
cout << "第 " << i << " 轮入队 + 出队后 queue = ";
|
cout << "第 " << i << " 轮入队 + 出队后 queue = ";
|
||||||
PrintUtil::printVector(queue->toVector());
|
PrintUtil::printVector(queue->toVector());
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队操作 */
|
/* 出队操作 */
|
||||||
int poll(bool isFront) {
|
int pop(bool isFront) {
|
||||||
// 若队列为空,直接返回 -1
|
// 若队列为空,直接返回 -1
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
return -1;
|
return -1;
|
||||||
@ -110,13 +110,13 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
int pollFirst() {
|
int popFirst() {
|
||||||
return poll(true);
|
return pop(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
int pollLast() {
|
int popLast() {
|
||||||
return poll(false);
|
return pop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 访问队首元素 */
|
/* 访问队首元素 */
|
||||||
@ -166,11 +166,11 @@ int main() {
|
|||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque->pollLast();
|
int popLast = deque->popLast();
|
||||||
cout << "队尾出队元素 = " << pollLast << ",队尾出队后 deque = ";
|
cout << "队尾出队元素 = " << popLast << ",队尾出队后 deque = ";
|
||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
int pollFirst = deque->pollFirst();
|
int popFirst = deque->popFirst();
|
||||||
cout << "队首出队元素 = " << pollFirst << ",队首出队后 deque = ";
|
cout << "队首出队元素 = " << popFirst << ",队首出队后 deque = ";
|
||||||
PrintUtil::printVector(deque->toVector());
|
PrintUtil::printVector(deque->toVector());
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
|
@ -52,7 +52,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
void poll() {
|
void pop() {
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
ListNode *tmp = front;
|
ListNode *tmp = front;
|
||||||
@ -101,8 +101,8 @@ int main() {
|
|||||||
cout << "队首元素 peek = " << peek << endl;
|
cout << "队首元素 peek = " << peek << endl;
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
queue->poll();
|
queue->pop();
|
||||||
cout << "出队元素 poll = " << peek << ",出队后 queue = ";
|
cout << "出队元素 pop = " << peek << ",出队后 queue = ";
|
||||||
PrintUtil::printVector(queue->toVector());
|
PrintUtil::printVector(queue->toVector());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
|
@ -81,7 +81,7 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
public int pollFirst()
|
public int popFirst()
|
||||||
{
|
{
|
||||||
int num = peekFirst();
|
int num = peekFirst();
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
@ -91,7 +91,7 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
public int pollLast()
|
public int popLast()
|
||||||
{
|
{
|
||||||
int num = peekLast();
|
int num = peekLast();
|
||||||
queSize--;
|
queSize--;
|
||||||
@ -158,10 +158,10 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
Console.WriteLine("元素 1 队首入队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("元素 1 队首入队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque.pollLast();
|
int popLast = deque.popLast();
|
||||||
Console.WriteLine("队尾出队元素 = " + pollLast + ",队尾出队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("队尾出队元素 = " + popLast + ",队尾出队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
int pollFirst = deque.pollFirst();
|
int popFirst = deque.popFirst();
|
||||||
Console.WriteLine("队首出队元素 = " + pollFirst + ",队首出队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("队首出队元素 = " + popFirst + ",队首出队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
|
@ -56,7 +56,7 @@ class ArrayQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
public int poll()
|
public int pop()
|
||||||
{
|
{
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
@ -108,8 +108,8 @@ public class array_queue
|
|||||||
Console.WriteLine("队首元素 peek = " + peek);
|
Console.WriteLine("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.pop();
|
||||||
Console.WriteLine("出队元素 poll = " + poll + ",出队后 queue = " + string.Join(",", queue.toArray()));
|
Console.WriteLine("出队元素 pop = " + pop + ",出队后 queue = " + string.Join(",", queue.toArray()));
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
@ -123,7 +123,7 @@ public class array_queue
|
|||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
queue.push(i);
|
queue.push(i);
|
||||||
queue.poll();
|
queue.pop();
|
||||||
Console.WriteLine("第 " + i + " 轮入队 + 出队后 queue = " + string.Join(",", queue.toArray()));
|
Console.WriteLine("第 " + i + " 轮入队 + 出队后 queue = " + string.Join(",", queue.toArray()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队操作 */
|
/* 出队操作 */
|
||||||
private int? poll(bool isFront)
|
private int? pop(bool isFront)
|
||||||
{
|
{
|
||||||
// 若队列为空,直接返回 null
|
// 若队列为空,直接返回 null
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@ -133,15 +133,15 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
public int? pollFirst()
|
public int? popFirst()
|
||||||
{
|
{
|
||||||
return poll(true);
|
return pop(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
public int? pollLast()
|
public int? popLast()
|
||||||
{
|
{
|
||||||
return poll(false);
|
return pop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 访问队首元素 */
|
/* 访问队首元素 */
|
||||||
@ -196,10 +196,10 @@ namespace hello_algo.chapter_stack_and_queue
|
|||||||
Console.WriteLine("元素 1 队首入队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("元素 1 队首入队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int? pollLast = deque.pollLast();
|
int? popLast = deque.popLast();
|
||||||
Console.WriteLine("队尾出队元素 = " + pollLast + ",队尾出队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("队尾出队元素 = " + popLast + ",队尾出队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
int? pollFirst = deque.pollFirst();
|
int? popFirst = deque.popFirst();
|
||||||
Console.WriteLine("队首出队元素 = " + pollFirst + ",队首出队后 deque = " + string.Join(" ", deque.toArray()));
|
Console.WriteLine("队首出队元素 = " + popFirst + ",队首出队后 deque = " + string.Join(" ", deque.toArray()));
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
|
@ -54,7 +54,7 @@ class LinkedListQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
public int poll()
|
public int pop()
|
||||||
{
|
{
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
@ -109,8 +109,8 @@ public class linkedlist_queue
|
|||||||
Console.WriteLine("队首元素 peek = " + peek);
|
Console.WriteLine("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.pop();
|
||||||
Console.WriteLine("出队元素 poll = " + poll + ",出队后 queue = " + String.Join(",", queue.toArray()));
|
Console.WriteLine("出队元素 pop = " + pop + ",出队后 queue = " + String.Join(",", queue.toArray()));
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
|
@ -29,8 +29,8 @@ public class queue
|
|||||||
Console.WriteLine("队首元素 peek = " + peek);
|
Console.WriteLine("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.Dequeue();
|
int pop = queue.Dequeue();
|
||||||
Console.WriteLine("出队元素 poll = " + poll + ",出队后 queue = " + String.Join(",", queue.ToArray()));
|
Console.WriteLine("出队元素 pop = " + pop + ",出队后 queue = " + String.Join(",", queue.ToArray()));
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.Count();
|
int size = queue.Count();
|
||||||
|
@ -47,7 +47,7 @@ func (q *arrayQueue) push(num int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
func (q *arrayQueue) poll() any {
|
func (q *arrayQueue) pop() any {
|
||||||
num := q.peek()
|
num := q.peek()
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
q.front = (q.front + 1) % q.queCapacity
|
q.front = (q.front + 1) % q.queCapacity
|
||||||
|
@ -112,11 +112,11 @@ func TestLinkedListDeque(t *testing.T) {
|
|||||||
fmt.Println("队尾元素 rear =", rear)
|
fmt.Println("队尾元素 rear =", rear)
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
pollFirst := deque.pollFirst()
|
popFirst := deque.popFirst()
|
||||||
fmt.Print("队首出队元素 pollFirst = ", pollFirst, ",队首出队后 deque = ")
|
fmt.Print("队首出队元素 popFirst = ", popFirst, ",队首出队后 deque = ")
|
||||||
PrintList(deque.toList())
|
PrintList(deque.toList())
|
||||||
pollLast := deque.pollLast()
|
popLast := deque.popLast()
|
||||||
fmt.Print("队尾出队元素 pollLast = ", pollLast, ",队尾出队后 deque = ")
|
fmt.Print("队尾出队元素 popLast = ", popLast, ",队尾出队后 deque = ")
|
||||||
PrintList(deque.toList())
|
PrintList(deque.toList())
|
||||||
|
|
||||||
// 获取队的长度
|
// 获取队的长度
|
||||||
@ -136,6 +136,6 @@ func BenchmarkLinkedListDeque(b *testing.B) {
|
|||||||
deque.pushLast(777)
|
deque.pushLast(777)
|
||||||
}
|
}
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
deque.pollFirst()
|
deque.popFirst()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ func (s *linkedListDeque) pushLast(value any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首元素出队 */
|
/* 队首元素出队 */
|
||||||
func (s *linkedListDeque) pollFirst() any {
|
func (s *linkedListDeque) popFirst() any {
|
||||||
if s.isEmpty() {
|
if s.isEmpty() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ func (s *linkedListDeque) pollFirst() any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾元素出队 */
|
/* 队尾元素出队 */
|
||||||
func (s *linkedListDeque) pollLast() any {
|
func (s *linkedListDeque) popLast() any {
|
||||||
if s.isEmpty() {
|
if s.isEmpty() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ func (s *linkedListQueue) push(value any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
func (s *linkedListQueue) poll() any {
|
func (s *linkedListQueue) pop() any {
|
||||||
if s.isEmpty() {
|
if s.isEmpty() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -31,9 +31,9 @@ func TestQueue(t *testing.T) {
|
|||||||
fmt.Println("队首元素 peek =", peek.Value)
|
fmt.Println("队首元素 peek =", peek.Value)
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
poll := queue.Front()
|
pop := queue.Front()
|
||||||
queue.Remove(poll)
|
queue.Remove(pop)
|
||||||
fmt.Print("出队元素 poll = ", poll.Value, ",出队后 queue = ")
|
fmt.Print("出队元素 pop = ", pop.Value, ",出队后 queue = ")
|
||||||
PrintList(queue)
|
PrintList(queue)
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
@ -64,8 +64,8 @@ func TestArrayQueue(t *testing.T) {
|
|||||||
fmt.Println("队首元素 peek =", peek)
|
fmt.Println("队首元素 peek =", peek)
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
poll := queue.poll()
|
pop := queue.pop()
|
||||||
fmt.Print("出队元素 poll = ", poll, ", 出队后 queue = ")
|
fmt.Print("出队元素 pop = ", pop, ", 出队后 queue = ")
|
||||||
PrintSlice(queue.toSlice())
|
PrintSlice(queue.toSlice())
|
||||||
|
|
||||||
// 获取队的长度
|
// 获取队的长度
|
||||||
@ -79,7 +79,7 @@ func TestArrayQueue(t *testing.T) {
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
queue.push(i)
|
queue.push(i)
|
||||||
queue.poll()
|
queue.pop()
|
||||||
fmt.Print("第", i, "轮入队 + 出队后 queue =")
|
fmt.Print("第", i, "轮入队 + 出队后 queue =")
|
||||||
PrintSlice(queue.toSlice())
|
PrintSlice(queue.toSlice())
|
||||||
}
|
}
|
||||||
@ -103,8 +103,8 @@ func TestLinkedListQueue(t *testing.T) {
|
|||||||
fmt.Println("队首元素 peek =", peek)
|
fmt.Println("队首元素 peek =", peek)
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
poll := queue.poll()
|
pop := queue.pop()
|
||||||
fmt.Print("出队元素 poll = ", poll, ", 出队后 queue = ")
|
fmt.Print("出队元素 pop = ", pop, ", 出队后 queue = ")
|
||||||
PrintList(queue.toList())
|
PrintList(queue.toList())
|
||||||
|
|
||||||
// 获取队的长度
|
// 获取队的长度
|
||||||
@ -125,7 +125,7 @@ func BenchmarkArrayQueue(b *testing.B) {
|
|||||||
queue.push(777)
|
queue.push(777)
|
||||||
}
|
}
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
queue.poll()
|
queue.pop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,6 +137,6 @@ func BenchmarkLinkedQueue(b *testing.B) {
|
|||||||
queue.push(777)
|
queue.push(777)
|
||||||
}
|
}
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
queue.poll()
|
queue.pop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
public int pollFirst() {
|
public int popFirst() {
|
||||||
int num = peekFirst();
|
int num = peekFirst();
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
front = index(front + 1);
|
front = index(front + 1);
|
||||||
@ -80,7 +80,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
public int pollLast() {
|
public int popLast() {
|
||||||
int num = peekLast();
|
int num = peekLast();
|
||||||
queSize--;
|
queSize--;
|
||||||
return num;
|
return num;
|
||||||
@ -135,10 +135,10 @@ public class array_deque {
|
|||||||
System.out.println("元素 1 队首入队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("元素 1 队首入队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque.pollLast();
|
int popLast = deque.popLast();
|
||||||
System.out.println("队尾出队元素 = " + pollLast + ",队尾出队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("队尾出队元素 = " + popLast + ",队尾出队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
int pollFirst = deque.pollFirst();
|
int popFirst = deque.popFirst();
|
||||||
System.out.println("队首出队元素 = " + pollFirst + ",队首出队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("队首出队元素 = " + popFirst + ",队首出队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
|
@ -49,7 +49,7 @@ class ArrayQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
public int poll() {
|
public int pop() {
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
front = (front + 1) % capacity();
|
front = (front + 1) % capacity();
|
||||||
@ -94,8 +94,8 @@ public class array_queue {
|
|||||||
System.out.println("队首元素 peek = " + peek);
|
System.out.println("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.pop();
|
||||||
System.out.println("出队元素 poll = " + poll + ",出队后 queue = " + Arrays.toString(queue.toArray()));
|
System.out.println("出队元素 pop = " + pop + ",出队后 queue = " + Arrays.toString(queue.toArray()));
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
@ -108,7 +108,7 @@ public class array_queue {
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
queue.push(i);
|
queue.push(i);
|
||||||
queue.poll();
|
queue.pop();
|
||||||
System.out.println("第 " + i + " 轮入队 + 出队后 queue = " + Arrays.toString(queue.toArray()));
|
System.out.println("第 " + i + " 轮入队 + 出队后 queue = " + Arrays.toString(queue.toArray()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,10 +30,10 @@ public class deque {
|
|||||||
System.out.println("元素 1 队首入队后 deque = " + deque);
|
System.out.println("元素 1 队首入队后 deque = " + deque);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque.pollLast();
|
int popLast = deque.pollLast();
|
||||||
System.out.println("队尾出队元素 = " + pollLast + ",队尾出队后 deque = " + deque);
|
System.out.println("队尾出队元素 = " + popLast + ",队尾出队后 deque = " + deque);
|
||||||
int pollFirst = deque.pollFirst();
|
int popFirst = deque.pollFirst();
|
||||||
System.out.println("队首出队元素 = " + pollFirst + ",队首出队后 deque = " + deque);
|
System.out.println("队首出队元素 = " + popFirst + ",队首出队后 deque = " + deque);
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
|
@ -71,7 +71,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队操作 */
|
/* 出队操作 */
|
||||||
private Integer poll(boolean isFront) {
|
private Integer pop(boolean isFront) {
|
||||||
// 若队列为空,直接返回 null
|
// 若队列为空,直接返回 null
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
return null;
|
return null;
|
||||||
@ -102,13 +102,13 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
public Integer pollFirst() {
|
public Integer popFirst() {
|
||||||
return poll(true);
|
return pop(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
public Integer pollLast() {
|
public Integer popLast() {
|
||||||
return poll(false);
|
return pop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 访问队首元素 */
|
/* 访问队首元素 */
|
||||||
@ -155,10 +155,10 @@ public class linkedlist_deque {
|
|||||||
System.out.println("元素 1 队首入队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("元素 1 队首入队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollLast = deque.pollLast();
|
int popLast = deque.popLast();
|
||||||
System.out.println("队尾出队元素 = " + pollLast + ",队尾出队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("队尾出队元素 = " + popLast + ",队尾出队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
int pollFirst = deque.pollFirst();
|
int popFirst = deque.popFirst();
|
||||||
System.out.println("队首出队元素 = " + pollFirst + ",队首出队后 deque = " + Arrays.toString(deque.toArray()));
|
System.out.println("队首出队元素 = " + popFirst + ",队首出队后 deque = " + Arrays.toString(deque.toArray()));
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
|
@ -45,7 +45,7 @@ class LinkedListQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
public int poll() {
|
public int pop() {
|
||||||
int num = peek();
|
int num = peek();
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
front = front.next;
|
front = front.next;
|
||||||
@ -90,8 +90,8 @@ public class linkedlist_queue {
|
|||||||
System.out.println("队首元素 peek = " + peek);
|
System.out.println("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.pop();
|
||||||
System.out.println("出队元素 poll = " + poll + ",出队后 queue = " + Arrays.toString(queue.toArray()));
|
System.out.println("出队元素 pop = " + pop + ",出队后 queue = " + Arrays.toString(queue.toArray()));
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
|
@ -26,8 +26,8 @@ public class queue {
|
|||||||
System.out.println("队首元素 peek = " + peek);
|
System.out.println("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.poll();
|
||||||
System.out.println("出队元素 poll = " + poll + ",出队后 queue = " + queue);
|
System.out.println("出队元素 pop = " + pop + ",出队后 queue = " + queue);
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
|
@ -68,7 +68,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
pollFirst() {
|
popFirst() {
|
||||||
const num = this.peekFirst();
|
const num = this.peekFirst();
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
this.#front = this.index(this.#front + 1);
|
this.#front = this.index(this.#front + 1);
|
||||||
@ -77,7 +77,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
pollLast() {
|
popLast() {
|
||||||
const num = this.peekLast();
|
const num = this.peekLast();
|
||||||
this.#queSize--;
|
this.#queSize--;
|
||||||
return num;
|
return num;
|
||||||
@ -132,10 +132,10 @@ deque.pushFirst(1);
|
|||||||
console.log("元素 1 队首入队后 deque = [" + deque.toArray() + "]");
|
console.log("元素 1 队首入队后 deque = [" + deque.toArray() + "]");
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const pollLast = deque.pollLast();
|
const popLast = deque.popLast();
|
||||||
console.log("队尾出队元素 = " + pollLast + ",队尾出队后 deque = [" + deque.toArray() + "]");
|
console.log("队尾出队元素 = " + popLast + ",队尾出队后 deque = [" + deque.toArray() + "]");
|
||||||
const pollFirst = deque.pollFirst();
|
const popFirst = deque.popFirst();
|
||||||
console.log("队首出队元素 = " + pollFirst + ",队首出队后 deque = [" + deque.toArray()+ "]");
|
console.log("队首出队元素 = " + popFirst + ",队首出队后 deque = [" + deque.toArray()+ "]");
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
const size = deque.size();
|
const size = deque.size();
|
||||||
|
@ -44,7 +44,7 @@ class ArrayQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
poll() {
|
pop() {
|
||||||
const num = this.peek();
|
const num = this.peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
this.#front = (this.#front + 1) % this.capacity;
|
this.#front = (this.#front + 1) % this.capacity;
|
||||||
@ -89,8 +89,8 @@ const peek = queue.peek();
|
|||||||
console.log("队首元素 peek = " + peek);
|
console.log("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const poll = queue.poll();
|
const pop = queue.pop();
|
||||||
console.log("出队元素 poll = " + poll + ",出队后 queue =", queue.toArray());
|
console.log("出队元素 pop = " + pop + ",出队后 queue =", queue.toArray());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.size;
|
const size = queue.size;
|
||||||
@ -103,6 +103,6 @@ console.log("队列是否为空 = " + empty);
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
queue.push(i);
|
queue.push(i);
|
||||||
queue.poll();
|
queue.pop();
|
||||||
console.log("第 " + i + " 轮入队 + 出队后 queue =", queue.toArray());
|
console.log("第 " + i + " 轮入队 + 出队后 queue =", queue.toArray());
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队操作 */
|
/* 队尾出队操作 */
|
||||||
pollLast() {
|
popLast() {
|
||||||
if (this.#queSize === 0) {
|
if (this.#queSize === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队操作 */
|
/* 队首出队操作 */
|
||||||
pollFirst() {
|
popFirst() {
|
||||||
if (this.#queSize === 0) {
|
if (this.#queSize === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -151,11 +151,11 @@ console.log("元素 1 队首入队后 linkedListDeque = ");
|
|||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const pollLast = linkedListDeque.pollLast();
|
const popLast = linkedListDeque.popLast();
|
||||||
console.log("队尾出队元素 = " + pollLast + ",队尾出队后 linkedListDeque = ");
|
console.log("队尾出队元素 = " + popLast + ",队尾出队后 linkedListDeque = ");
|
||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
const pollFirst = linkedListDeque.pollFirst();
|
const popFirst = linkedListDeque.popFirst();
|
||||||
console.log("队首出队元素 = " + pollFirst + ",队首出队后 linkedListDeque = ");
|
console.log("队首出队元素 = " + popFirst + ",队首出队后 linkedListDeque = ");
|
||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
|
@ -44,7 +44,7 @@ class LinkedListQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
poll() {
|
pop() {
|
||||||
const num = this.peek();
|
const num = this.peek();
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
this.#front = this.#front.next;
|
this.#front = this.#front.next;
|
||||||
@ -90,8 +90,8 @@ const peek = queue.peek();
|
|||||||
console.log("队首元素 peek = " + peek);
|
console.log("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const poll = queue.poll();
|
const pop = queue.pop();
|
||||||
console.log("出队元素 poll = " + poll + ",出队后 queue = " + queue.toArray());
|
console.log("出队元素 pop = " + pop + ",出队后 queue = " + queue.toArray());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.size;
|
const size = queue.size;
|
||||||
|
@ -23,8 +23,8 @@ console.log("队首元素 peek =", peek);
|
|||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
||||||
const poll = queue.shift();
|
const pop = queue.shift();
|
||||||
console.log("出队元素 poll =", poll, ",出队后 queue = ", queue);
|
console.log("出队元素 pop =", pop, ",出队后 queue = ", queue);
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.length;
|
const size = queue.length;
|
||||||
|
@ -60,7 +60,7 @@ class ArrayDeque:
|
|||||||
self.__nums[rear] = num
|
self.__nums[rear] = num
|
||||||
self.__size += 1
|
self.__size += 1
|
||||||
|
|
||||||
def poll_first(self) -> int:
|
def pop_first(self) -> int:
|
||||||
""" 队首出队 """
|
""" 队首出队 """
|
||||||
num = self.peek_first()
|
num = self.peek_first()
|
||||||
# 队首指针向后移动一位
|
# 队首指针向后移动一位
|
||||||
@ -68,7 +68,7 @@ class ArrayDeque:
|
|||||||
self.__size -= 1
|
self.__size -= 1
|
||||||
return num
|
return num
|
||||||
|
|
||||||
def poll_last(self) -> int:
|
def pop_last(self) -> int:
|
||||||
""" 队尾出队 """
|
""" 队尾出队 """
|
||||||
num = self.peek_last()
|
num = self.peek_last()
|
||||||
self.__size -= 1
|
self.__size -= 1
|
||||||
@ -117,10 +117,10 @@ if __name__ == "__main__":
|
|||||||
print("元素 1 队首入队后 deque =", deque.to_array())
|
print("元素 1 队首入队后 deque =", deque.to_array())
|
||||||
|
|
||||||
""" 元素出队 """
|
""" 元素出队 """
|
||||||
poll_last: int = deque.poll_last()
|
pop_last: int = deque.pop_last()
|
||||||
print("队尾出队元素 =", poll_last, ",队尾出队后 deque =", deque.to_array())
|
print("队尾出队元素 =", pop_last, ",队尾出队后 deque =", deque.to_array())
|
||||||
poll_first: int = deque.poll_first()
|
pop_first: int = deque.pop_first()
|
||||||
print("队首出队元素 =", poll_first, ",队首出队后 deque =", deque.to_array())
|
print("队首出队元素 =", pop_first, ",队首出队后 deque =", deque.to_array())
|
||||||
|
|
||||||
""" 获取双向队列的长度 """
|
""" 获取双向队列的长度 """
|
||||||
size: int = deque.size()
|
size: int = deque.size()
|
||||||
|
@ -38,7 +38,7 @@ class ArrayQueue:
|
|||||||
self.__nums[rear] = num
|
self.__nums[rear] = num
|
||||||
self.__size += 1
|
self.__size += 1
|
||||||
|
|
||||||
def poll(self) -> int:
|
def pop(self) -> int:
|
||||||
""" 出队 """
|
""" 出队 """
|
||||||
num: int = self.peek()
|
num: int = self.peek()
|
||||||
# 队首指针向后移动一位,若越过尾部则返回到数组头部
|
# 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
@ -79,8 +79,8 @@ if __name__ == "__main__":
|
|||||||
print("队首元素 peek =", peek)
|
print("队首元素 peek =", peek)
|
||||||
|
|
||||||
""" 元素出队 """
|
""" 元素出队 """
|
||||||
poll: int = queue.poll()
|
pop: int = queue.pop()
|
||||||
print("出队元素 poll =", poll)
|
print("出队元素 pop =", pop)
|
||||||
print("出队后 queue =", queue.to_list())
|
print("出队后 queue =", queue.to_list())
|
||||||
|
|
||||||
""" 获取队列的长度 """
|
""" 获取队列的长度 """
|
||||||
@ -94,5 +94,5 @@ if __name__ == "__main__":
|
|||||||
""" 测试环形数组 """
|
""" 测试环形数组 """
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
queue.push(i)
|
queue.push(i)
|
||||||
queue.poll()
|
queue.pop()
|
||||||
print("第", i, "轮入队 + 出队后 queue = ", queue.to_list())
|
print("第", i, "轮入队 + 出队后 queue = ", queue.to_list())
|
||||||
|
@ -60,7 +60,7 @@ class LinkedListDeque:
|
|||||||
""" 队尾入队 """
|
""" 队尾入队 """
|
||||||
self.push(num, False)
|
self.push(num, False)
|
||||||
|
|
||||||
def poll(self, is_front: bool) -> int:
|
def pop(self, is_front: bool) -> int:
|
||||||
""" 出队操作 """
|
""" 出队操作 """
|
||||||
# 若队列为空,直接返回 None
|
# 若队列为空,直接返回 None
|
||||||
if self.is_empty():
|
if self.is_empty():
|
||||||
@ -86,13 +86,13 @@ class LinkedListDeque:
|
|||||||
self.__size -= 1 # 更新队列长度
|
self.__size -= 1 # 更新队列长度
|
||||||
return val
|
return val
|
||||||
|
|
||||||
def poll_first(self) -> int:
|
def pop_first(self) -> int:
|
||||||
""" 队首出队 """
|
""" 队首出队 """
|
||||||
return self.poll(True)
|
return self.pop(True)
|
||||||
|
|
||||||
def poll_last(self) -> int:
|
def pop_last(self) -> int:
|
||||||
""" 队尾出队 """
|
""" 队尾出队 """
|
||||||
return self.poll(False)
|
return self.pop(False)
|
||||||
|
|
||||||
def peek_first(self) -> int:
|
def peek_first(self) -> int:
|
||||||
""" 访问队首元素 """
|
""" 访问队首元素 """
|
||||||
@ -134,10 +134,10 @@ if __name__ == "__main__":
|
|||||||
print("元素 1 队首入队后 deque =", deque.to_array())
|
print("元素 1 队首入队后 deque =", deque.to_array())
|
||||||
|
|
||||||
""" 元素出队 """
|
""" 元素出队 """
|
||||||
poll_last: int = deque.poll_last()
|
pop_last: int = deque.pop_last()
|
||||||
print("队尾出队元素 =", poll_last, ",队尾出队后 deque =", deque.to_array())
|
print("队尾出队元素 =", pop_last, ",队尾出队后 deque =", deque.to_array())
|
||||||
poll_first: int = deque.poll_first()
|
pop_first: int = deque.pop_first()
|
||||||
print("队首出队元素 =", poll_first, ",队首出队后 deque =", deque.to_array())
|
print("队首出队元素 =", pop_first, ",队首出队后 deque =", deque.to_array())
|
||||||
|
|
||||||
""" 获取双向队列的长度 """
|
""" 获取双向队列的长度 """
|
||||||
size: int = deque.size()
|
size: int = deque.size()
|
||||||
|
@ -38,7 +38,7 @@ class LinkedListQueue:
|
|||||||
self.__rear = node
|
self.__rear = node
|
||||||
self.__size += 1
|
self.__size += 1
|
||||||
|
|
||||||
def poll(self) -> int:
|
def pop(self) -> int:
|
||||||
""" 出队 """
|
""" 出队 """
|
||||||
num = self.peek()
|
num = self.peek()
|
||||||
# 删除头结点
|
# 删除头结点
|
||||||
@ -81,8 +81,8 @@ if __name__ == "__main__":
|
|||||||
print("队首元素 front =", peek)
|
print("队首元素 front =", peek)
|
||||||
|
|
||||||
""" 元素出队 """
|
""" 元素出队 """
|
||||||
pop_front: int = queue.poll()
|
pop_front: int = queue.pop()
|
||||||
print("出队元素 poll =", pop_front)
|
print("出队元素 pop =", pop_front)
|
||||||
print("出队后 queue =", queue.to_list())
|
print("出队后 queue =", queue.to_list())
|
||||||
|
|
||||||
""" 获取队列的长度 """
|
""" 获取队列的长度 """
|
||||||
|
@ -36,7 +36,7 @@ impl ArrayQueue {
|
|||||||
self.que_size += 1;
|
self.que_size += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn poll(&mut self) -> i32 {
|
fn pop(&mut self) -> i32 {
|
||||||
let num = self.peek();
|
let num = self.peek();
|
||||||
self.front = (self.front + 1) % self.que_capacity;
|
self.front = (self.front + 1) % self.que_capacity;
|
||||||
self.que_size -= 1;
|
self.que_size -= 1;
|
||||||
@ -77,10 +77,10 @@ fn main() {
|
|||||||
let peek = queue.peek();
|
let peek = queue.peek();
|
||||||
println!("队首元素 peek = {}", peek);
|
println!("队首元素 peek = {}", peek);
|
||||||
|
|
||||||
let poll = queue.poll();
|
let pop = queue.pop();
|
||||||
println!(
|
println!(
|
||||||
"出队元素 poll = {:?},出队后 queue = {:?}",
|
"出队元素 pop = {:?},出队后 queue = {:?}",
|
||||||
poll,
|
pop,
|
||||||
queue.to_vector()
|
queue.to_vector()
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ fn main() {
|
|||||||
|
|
||||||
for i in 0..10 {
|
for i in 0..10 {
|
||||||
queue.push(i);
|
queue.push(i);
|
||||||
queue.poll();
|
queue.pop();
|
||||||
println!("第 {:?} 轮入队 + 出队后 queue = {:?}", i, queue.to_vector());
|
println!("第 {:?} 轮入队 + 出队后 queue = {:?}", i, queue.to_vector());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,11 +27,11 @@ pub fn main() {
|
|||||||
print!("\n队尾元素 peekLast = {peek_last}");
|
print!("\n队尾元素 peekLast = {peek_last}");
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
let poll_first = deque.pop_front().unwrap(); // 队首元素出队
|
let pop_first = deque.pop_front().unwrap(); // 队首元素出队
|
||||||
print!("\n队首出队元素 pollFirst = {poll_first},队首出队后 deque = ");
|
print!("\n队首出队元素 popFirst = {pop_first},队首出队后 deque = ");
|
||||||
print_util::print_queue(&deque);
|
print_util::print_queue(&deque);
|
||||||
let poll_last = deque.pop_back().unwrap(); // 队尾元素出队
|
let pop_last = deque.pop_back().unwrap(); // 队尾元素出队
|
||||||
print!("\n队尾出队元素 pollLast = {poll_last},队尾出队后 deque = ");
|
print!("\n队尾出队元素 popLast = {pop_last},队尾出队后 deque = ");
|
||||||
print_util::print_queue(&deque);
|
print_util::print_queue(&deque);
|
||||||
|
|
||||||
// 获取双向队列的长度
|
// 获取双向队列的长度
|
||||||
|
@ -27,8 +27,8 @@ pub fn main() {
|
|||||||
println!("\n队首元素 peek = {peek}");
|
println!("\n队首元素 peek = {peek}");
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
let poll = queue.pop_front().unwrap();
|
let pop = queue.pop_front().unwrap();
|
||||||
print!("出队元素 poll = {poll},出队后 queue = ");
|
print!("出队元素 pop = {pop},出队后 queue = ");
|
||||||
print_util::print_queue(&queue);
|
print_util::print_queue(&queue);
|
||||||
|
|
||||||
// 获取队列的长度
|
// 获取队列的长度
|
||||||
|
@ -68,7 +68,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
func pollFirst() -> Int {
|
func popFirst() -> Int {
|
||||||
let num = peekFirst()
|
let num = peekFirst()
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
front = index(i: front + 1)
|
front = index(i: front + 1)
|
||||||
@ -77,7 +77,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
func pollLast() -> Int {
|
func popLast() -> Int {
|
||||||
let num = peekLast()
|
let num = peekLast()
|
||||||
queSize -= 1
|
queSize -= 1
|
||||||
return num
|
return num
|
||||||
@ -136,10 +136,10 @@ enum _ArrayDeque {
|
|||||||
print("元素 1 队首入队后 deque = \(deque.toArray())")
|
print("元素 1 队首入队后 deque = \(deque.toArray())")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
let pollLast = deque.pollLast()
|
let popLast = deque.popLast()
|
||||||
print("队尾出队元素 = \(pollLast),队尾出队后 deque = \(deque.toArray())")
|
print("队尾出队元素 = \(popLast),队尾出队后 deque = \(deque.toArray())")
|
||||||
let pollFirst = deque.pollFirst()
|
let popFirst = deque.popFirst()
|
||||||
print("队首出队元素 = \(pollFirst),队首出队后 deque = \(deque.toArray())")
|
print("队首出队元素 = \(popFirst),队首出队后 deque = \(deque.toArray())")
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
let size = deque.size()
|
let size = deque.size()
|
||||||
|
@ -46,7 +46,7 @@ class ArrayQueue {
|
|||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
@discardableResult
|
@discardableResult
|
||||||
func poll() -> Int {
|
func pop() -> Int {
|
||||||
let num = peek()
|
let num = peek()
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
front = (front + 1) % capacity()
|
front = (front + 1) % capacity()
|
||||||
@ -94,8 +94,8 @@ enum _ArrayQueue {
|
|||||||
print("队首元素 peek = \(peek)")
|
print("队首元素 peek = \(peek)")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
let poll = queue.poll()
|
let pop = queue.pop()
|
||||||
print("出队元素 poll = \(poll),出队后 queue = \(queue.toArray())")
|
print("出队元素 pop = \(pop),出队后 queue = \(queue.toArray())")
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
let size = queue.size()
|
let size = queue.size()
|
||||||
@ -108,7 +108,7 @@ enum _ArrayQueue {
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for i in 0 ..< 10 {
|
for i in 0 ..< 10 {
|
||||||
queue.push(num: i)
|
queue.push(num: i)
|
||||||
queue.poll()
|
queue.pop()
|
||||||
print("第 \(i) 轮入队 + 出队后 queue = \(queue.toArray())")
|
print("第 \(i) 轮入队 + 出队后 queue = \(queue.toArray())")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,11 +27,11 @@ enum Deque {
|
|||||||
print("队尾元素 peekLast = \(peekLast)")
|
print("队尾元素 peekLast = \(peekLast)")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 使用 Array 模拟时 pollFirst 的复杂度为 O(n)
|
// 使用 Array 模拟时 popFirst 的复杂度为 O(n)
|
||||||
let pollFirst = deque.removeFirst()
|
let popFirst = deque.removeFirst()
|
||||||
print("队首出队元素 pollFirst = \(pollFirst),队首出队后 deque = \(deque)")
|
print("队首出队元素 popFirst = \(popFirst),队首出队后 deque = \(deque)")
|
||||||
let pollLast = deque.removeLast()
|
let popLast = deque.removeLast()
|
||||||
print("队尾出队元素 pollLast = \(pollLast),队尾出队后 deque = \(deque)")
|
print("队尾出队元素 popLast = \(popLast),队尾出队后 deque = \(deque)")
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
let size = deque.count
|
let size = deque.count
|
||||||
|
@ -71,7 +71,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队操作 */
|
/* 出队操作 */
|
||||||
private func poll(isFront: Bool) -> Int {
|
private func pop(isFront: Bool) -> Int {
|
||||||
if isEmpty() {
|
if isEmpty() {
|
||||||
fatalError("双向队列为空")
|
fatalError("双向队列为空")
|
||||||
}
|
}
|
||||||
@ -103,13 +103,13 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
func pollFirst() -> Int {
|
func popFirst() -> Int {
|
||||||
poll(isFront: true)
|
pop(isFront: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
func pollLast() -> Int {
|
func popLast() -> Int {
|
||||||
poll(isFront: false)
|
pop(isFront: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 访问队首元素 */
|
/* 访问队首元素 */
|
||||||
@ -158,10 +158,10 @@ enum _LinkedListDeque {
|
|||||||
print("元素 1 队首入队后 deque = \(deque.toArray())")
|
print("元素 1 队首入队后 deque = \(deque.toArray())")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
let pollLast = deque.pollLast()
|
let popLast = deque.popLast()
|
||||||
print("队尾出队元素 = \(pollLast),队尾出队后 deque = \(deque.toArray())")
|
print("队尾出队元素 = \(popLast),队尾出队后 deque = \(deque.toArray())")
|
||||||
let pollFirst = deque.pollFirst()
|
let popFirst = deque.popFirst()
|
||||||
print("队首出队元素 = \(pollFirst),队首出队后 deque = \(deque.toArray())")
|
print("队首出队元素 = \(popFirst),队首出队后 deque = \(deque.toArray())")
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
let size = deque.size()
|
let size = deque.size()
|
||||||
|
@ -43,7 +43,7 @@ class LinkedListQueue {
|
|||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
@discardableResult
|
@discardableResult
|
||||||
func poll() -> Int {
|
func pop() -> Int {
|
||||||
let num = peek()
|
let num = peek()
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
front = front?.next
|
front = front?.next
|
||||||
@ -91,8 +91,8 @@ enum _LinkedListQueue {
|
|||||||
print("队首元素 peek = \(peek)")
|
print("队首元素 peek = \(peek)")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
let poll = queue.poll()
|
let pop = queue.pop()
|
||||||
print("出队元素 poll = \(poll),出队后 queue = \(queue.toArray())")
|
print("出队元素 pop = \(pop),出队后 queue = \(queue.toArray())")
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
let size = queue.size()
|
let size = queue.size()
|
||||||
|
@ -25,9 +25,9 @@ enum Queue {
|
|||||||
print("队首元素 peek = \(peek)")
|
print("队首元素 peek = \(peek)")
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 使用 Array 模拟时 poll 的复杂度为 O(n)
|
// 使用 Array 模拟时 pop 的复杂度为 O(n)
|
||||||
let pool = queue.removeFirst()
|
let pool = queue.removeFirst()
|
||||||
print("出队元素 poll = \(pool),出队后 queue = \(queue)")
|
print("出队元素 pop = \(pool),出队后 queue = \(queue)")
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
let size = queue.count
|
let size = queue.count
|
||||||
|
@ -69,7 +69,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队 */
|
/* 队首出队 */
|
||||||
pollFirst(): number {
|
popFirst(): number {
|
||||||
const num: number = this.peekFirst();
|
const num: number = this.peekFirst();
|
||||||
// 队首指针向后移动一位
|
// 队首指针向后移动一位
|
||||||
this.front = this.index(this.front + 1);
|
this.front = this.index(this.front + 1);
|
||||||
@ -78,7 +78,7 @@ class ArrayDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队 */
|
/* 队尾出队 */
|
||||||
pollLast(): number {
|
popLast(): number {
|
||||||
const num: number = this.peekLast();
|
const num: number = this.peekLast();
|
||||||
this.queSize--;
|
this.queSize--;
|
||||||
return num;
|
return num;
|
||||||
@ -133,10 +133,10 @@ deque.pushFirst(1);
|
|||||||
console.log("元素 1 队首入队后 deque = [" + deque.toArray() + "]");
|
console.log("元素 1 队首入队后 deque = [" + deque.toArray() + "]");
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const pollLast = deque.pollLast();
|
const popLast = deque.popLast();
|
||||||
console.log("队尾出队元素 = " + pollLast + ",队尾出队后 deque = [" + deque.toArray() + "]");
|
console.log("队尾出队元素 = " + popLast + ",队尾出队后 deque = [" + deque.toArray() + "]");
|
||||||
const pollFirst = deque.pollFirst();
|
const popFirst = deque.popFirst();
|
||||||
console.log("队首出队元素 = " + pollFirst + ",队首出队后 deque = [" + deque.toArray()+ "]");
|
console.log("队首出队元素 = " + popFirst + ",队首出队后 deque = [" + deque.toArray()+ "]");
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
const size = deque.size();
|
const size = deque.size();
|
||||||
|
@ -45,7 +45,7 @@ class ArrayQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
poll(): number {
|
pop(): number {
|
||||||
const num = this.peek();
|
const num = this.peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
this.front = (this.front + 1) % this.capacity;
|
this.front = (this.front + 1) % this.capacity;
|
||||||
@ -89,8 +89,8 @@ const peek = queue.peek();
|
|||||||
console.log("队首元素 peek = " + peek);
|
console.log("队首元素 peek = " + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const poll = queue.poll();
|
const pop = queue.pop();
|
||||||
console.log("出队元素 poll = " + poll + ",出队后 queue =", queue.toArray());
|
console.log("出队元素 pop = " + pop + ",出队后 queue =", queue.toArray());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.size;
|
const size = queue.size;
|
||||||
@ -103,7 +103,7 @@ console.log("队列是否为空 = " + empty);
|
|||||||
/* 测试环形数组 */
|
/* 测试环形数组 */
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
queue.push(i);
|
queue.push(i);
|
||||||
queue.poll();
|
queue.pop();
|
||||||
console.log("第 " + i + " 轮入队 + 出队后 queue =", queue.toArray());
|
console.log("第 " + i + " 轮入队 + 出队后 queue =", queue.toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队尾出队操作 */
|
/* 队尾出队操作 */
|
||||||
pollLast(): number {
|
popLast(): number {
|
||||||
if (this.queSize === 0) {
|
if (this.queSize === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ class LinkedListDeque {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 队首出队操作 */
|
/* 队首出队操作 */
|
||||||
pollFirst(): number {
|
popFirst(): number {
|
||||||
if (this.queSize === 0) {
|
if (this.queSize === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -151,11 +151,11 @@ console.log("元素 1 队首入队后 linkedListDeque = ");
|
|||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const pollLast: number = linkedListDeque.pollLast();
|
const popLast: number = linkedListDeque.popLast();
|
||||||
console.log("队尾出队元素 = " + pollLast + ",队尾出队后 linkedListDeque = ");
|
console.log("队尾出队元素 = " + popLast + ",队尾出队后 linkedListDeque = ");
|
||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
const pollFirst: number = linkedListDeque.pollFirst();
|
const popFirst: number = linkedListDeque.popFirst();
|
||||||
console.log("队首出队元素 = " + pollFirst + ",队首出队后 linkedListDeque = ");
|
console.log("队首出队元素 = " + popFirst + ",队首出队后 linkedListDeque = ");
|
||||||
linkedListDeque.print();
|
linkedListDeque.print();
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
|
@ -44,7 +44,7 @@ class LinkedListQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 出队 */
|
/* 出队 */
|
||||||
poll(): number {
|
pop(): number {
|
||||||
const num = this.peek();
|
const num = this.peek();
|
||||||
if (!this.front) throw new Error('队列为空');
|
if (!this.front) throw new Error('队列为空');
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
@ -88,8 +88,8 @@ const peek = queue.peek();
|
|||||||
console.log('队首元素 peek = ' + peek);
|
console.log('队首元素 peek = ' + peek);
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
const poll = queue.poll();
|
const pop = queue.pop();
|
||||||
console.log('出队元素 poll = ' + poll + ',出队后 queue = ' + queue.toArray());
|
console.log('出队元素 pop = ' + pop + ',出队后 queue = ' + queue.toArray());
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.size;
|
const size = queue.size;
|
||||||
|
@ -23,8 +23,8 @@ console.log("队首元素 peek =", peek);
|
|||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
||||||
const poll = queue.shift();
|
const pop = queue.shift();
|
||||||
console.log("出队元素 poll =", poll, ",出队后 queue = ", queue);
|
console.log("出队元素 pop =", pop, ",出队后 queue = ", queue);
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.length;
|
const size = queue.length;
|
||||||
|
@ -64,7 +64,7 @@ pub fn ArrayQueue(comptime T: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 出队
|
// 出队
|
||||||
pub fn poll(self: *Self) T {
|
pub fn pop(self: *Self) T {
|
||||||
var num = self.peek();
|
var num = self.peek();
|
||||||
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
// 队首指针向后移动一位,若越过尾部则返回到数组头部
|
||||||
self.front = (self.front + 1) % self.capacity();
|
self.front = (self.front + 1) % self.capacity();
|
||||||
@ -115,8 +115,8 @@ pub fn main() !void {
|
|||||||
std.debug.print("\n队首元素 peek = {}", .{peek});
|
std.debug.print("\n队首元素 peek = {}", .{peek});
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
var poll = queue.poll();
|
var pop = queue.pop();
|
||||||
std.debug.print("\n出队元素 poll = {},出队后 queue = ", .{poll});
|
std.debug.print("\n出队元素 pop = {},出队后 queue = ", .{pop});
|
||||||
inc.PrintUtil.printArray(i32, try queue.toArray());
|
inc.PrintUtil.printArray(i32, try queue.toArray());
|
||||||
|
|
||||||
// 获取队列的长度
|
// 获取队列的长度
|
||||||
@ -131,7 +131,7 @@ pub fn main() !void {
|
|||||||
var i: i32 = 0;
|
var i: i32 = 0;
|
||||||
while (i < 10) : (i += 1) {
|
while (i < 10) : (i += 1) {
|
||||||
try queue.push(i);
|
try queue.push(i);
|
||||||
_ = queue.poll();
|
_ = queue.pop();
|
||||||
std.debug.print("\n第 {} 轮入队 + 出队后 queue = ", .{i});
|
std.debug.print("\n第 {} 轮入队 + 出队后 queue = ", .{i});
|
||||||
inc.PrintUtil.printArray(i32, try queue.toArray());
|
inc.PrintUtil.printArray(i32, try queue.toArray());
|
||||||
}
|
}
|
||||||
|
@ -32,11 +32,11 @@ pub fn main() !void {
|
|||||||
std.debug.print("\n队尾元素 peekLast = {}", .{peekLast});
|
std.debug.print("\n队尾元素 peekLast = {}", .{peekLast});
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
var pollFirst = deque.popFirst().?.data; // 队首元素出队
|
var popFirst = deque.popFirst().?.data; // 队首元素出队
|
||||||
std.debug.print("\n队首出队元素 pollFirst = {},队首出队后 deque = ", .{pollFirst});
|
std.debug.print("\n队首出队元素 popFirst = {},队首出队后 deque = ", .{popFirst});
|
||||||
inc.PrintUtil.printQueue(i32, deque);
|
inc.PrintUtil.printQueue(i32, deque);
|
||||||
var pollLast = deque.pop().?.data; // 队尾元素出队
|
var popLast = deque.pop().?.data; // 队尾元素出队
|
||||||
std.debug.print("\n队尾出队元素 pollLast = {},队尾出队后 deque = ", .{pollLast});
|
std.debug.print("\n队尾出队元素 popLast = {},队尾出队后 deque = ", .{popLast});
|
||||||
inc.PrintUtil.printQueue(i32, deque);
|
inc.PrintUtil.printQueue(i32, deque);
|
||||||
|
|
||||||
// 获取双向队列的长度
|
// 获取双向队列的长度
|
||||||
|
@ -96,7 +96,7 @@ pub fn LinkedListDeque(comptime T: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 出队操作
|
// 出队操作
|
||||||
pub fn poll(self: *Self, is_front: bool) T {
|
pub fn pop(self: *Self, is_front: bool) T {
|
||||||
if (self.isEmpty()) @panic("双向队列为空");
|
if (self.isEmpty()) @panic("双向队列为空");
|
||||||
var val: T = undefined;
|
var val: T = undefined;
|
||||||
// 队首出队操作
|
// 队首出队操作
|
||||||
@ -125,13 +125,13 @@ pub fn LinkedListDeque(comptime T: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 队首出队
|
// 队首出队
|
||||||
pub fn pollFirst(self: *Self) T {
|
pub fn popFirst(self: *Self) T {
|
||||||
return self.poll(true);
|
return self.pop(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 队尾出队
|
// 队尾出队
|
||||||
pub fn pollLast(self: *Self) T {
|
pub fn popLast(self: *Self) T {
|
||||||
return self.poll(false);
|
return self.pop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 访问队首元素
|
// 访问队首元素
|
||||||
@ -188,11 +188,11 @@ pub fn main() !void {
|
|||||||
inc.PrintUtil.printArray(i32, try deque.toArray());
|
inc.PrintUtil.printArray(i32, try deque.toArray());
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
var poll_last = deque.pollLast();
|
var pop_last = deque.popLast();
|
||||||
std.debug.print("\n队尾出队元素 = {},队尾出队后 deque = ", .{poll_last});
|
std.debug.print("\n队尾出队元素 = {},队尾出队后 deque = ", .{pop_last});
|
||||||
inc.PrintUtil.printArray(i32, try deque.toArray());
|
inc.PrintUtil.printArray(i32, try deque.toArray());
|
||||||
var poll_first = deque.pollFirst();
|
var pop_first = deque.popFirst();
|
||||||
std.debug.print("\n队首出队元素 = {},队首出队后 deque = ", .{poll_first});
|
std.debug.print("\n队首出队元素 = {},队首出队后 deque = ", .{pop_first});
|
||||||
inc.PrintUtil.printArray(i32, try deque.toArray());
|
inc.PrintUtil.printArray(i32, try deque.toArray());
|
||||||
|
|
||||||
// 获取双向队列的长度
|
// 获取双向队列的长度
|
||||||
|
@ -67,7 +67,7 @@ pub fn LinkedListQueue(comptime T: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 出队
|
// 出队
|
||||||
pub fn poll(self: *Self) T {
|
pub fn pop(self: *Self) T {
|
||||||
var num = self.peek();
|
var num = self.peek();
|
||||||
// 删除头结点
|
// 删除头结点
|
||||||
self.front = self.front.?.next;
|
self.front = self.front.?.next;
|
||||||
@ -111,8 +111,8 @@ pub fn main() !void {
|
|||||||
std.debug.print("\n队首元素 peek = {}", .{peek});
|
std.debug.print("\n队首元素 peek = {}", .{peek});
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
var poll = queue.poll();
|
var pop = queue.pop();
|
||||||
std.debug.print("\n出队元素 poll = {},出队后 queue = ", .{poll});
|
std.debug.print("\n出队元素 pop = {},出队后 queue = ", .{pop});
|
||||||
inc.PrintUtil.printArray(i32, try queue.toArray());
|
inc.PrintUtil.printArray(i32, try queue.toArray());
|
||||||
|
|
||||||
// 获取队列的长度
|
// 获取队列的长度
|
||||||
|
@ -30,8 +30,8 @@ pub fn main() !void {
|
|||||||
std.debug.print("\n队首元素 peek = {}", .{peek});
|
std.debug.print("\n队首元素 peek = {}", .{peek});
|
||||||
|
|
||||||
// 元素出队
|
// 元素出队
|
||||||
var poll = queue.popFirst().?.data;
|
var pop = queue.popFirst().?.data;
|
||||||
std.debug.print("\n出队元素 poll = {},出队后 queue = ", .{poll});
|
std.debug.print("\n出队元素 pop = {},出队后 queue = ", .{pop});
|
||||||
inc.PrintUtil.printQueue(i32, queue);
|
inc.PrintUtil.printQueue(i32, queue);
|
||||||
|
|
||||||
// 获取队列的长度
|
// 获取队列的长度
|
||||||
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
@ -6,18 +6,18 @@
|
|||||||
|
|
||||||
## 双向队列常用操作
|
## 双向队列常用操作
|
||||||
|
|
||||||
双向队列的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。
|
双向队列的常用操作见下表,方法名需根据语言来确定。
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法名 | 描述 | 时间复杂度 |
|
| 方法名 | 描述 | 时间复杂度 |
|
||||||
| ------------ | ---------------- | ---------- |
|
| ----------- | -------------- | ---------- |
|
||||||
| pushFirst() | 将元素添加至队首 | $O(1)$ |
|
| pushFirst() | 将元素添加至队首 | $O(1)$ |
|
||||||
| pushLast() | 将元素添加至队尾 | $O(1)$ |
|
| pushLast() | 将元素添加至队尾 | $O(1)$ |
|
||||||
| pollFirst() | 删除队首元素 | $O(1)$ |
|
| popFirst() | 删除队首元素 | $O(1)$ |
|
||||||
| pollLast() | 删除队尾元素 | $O(1)$ |
|
| popLast() | 删除队尾元素 | $O(1)$ |
|
||||||
| peekFirst() | 访问队首元素 | $O(1)$ |
|
| peekFirst() | 访问队首元素 | $O(1)$ |
|
||||||
| peekLast() | 访问队尾元素 | $O(1)$ |
|
| peekLast() | 访问队尾元素 | $O(1)$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -41,8 +41,8 @@
|
|||||||
int peekLast = deque.peekLast(); // 队尾元素
|
int peekLast = deque.peekLast(); // 队尾元素
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int pollFirst = deque.pollFirst(); // 队首元素出队
|
int popFirst = deque.pollFirst(); // 队首元素出队
|
||||||
int pollLast = deque.pollLast(); // 队尾元素出队
|
int popLast = deque.pollLast(); // 队尾元素出队
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
int size = deque.size();
|
int size = deque.size();
|
||||||
@ -266,9 +266,9 @@
|
|||||||
let peekLast = deque.last! // 队尾元素
|
let peekLast = deque.last! // 队尾元素
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 使用 Array 模拟时 pollFirst 的复杂度为 O(n)
|
// 使用 Array 模拟时 popFirst 的复杂度为 O(n)
|
||||||
let pollFirst = deque.removeFirst() // 队首元素出队
|
let popFirst = deque.removeFirst() // 队首元素出队
|
||||||
let pollLast = deque.removeLast() // 队尾元素出队
|
let popLast = deque.removeLast() // 队尾元素出队
|
||||||
|
|
||||||
/* 获取双向队列的长度 */
|
/* 获取双向队列的长度 */
|
||||||
let size = deque.count
|
let size = deque.count
|
||||||
@ -304,11 +304,11 @@
|
|||||||
=== "pushFirst()"
|
=== "pushFirst()"
|
||||||

|

|
||||||
|
|
||||||
=== "pollLast()"
|
=== "popLast()"
|
||||||

|

|
||||||
|
|
||||||
=== "pollFirst()"
|
=== "popFirst()"
|
||||||

|

|
||||||
|
|
||||||
以下是具体实现代码。
|
以下是具体实现代码。
|
||||||
|
|
||||||
@ -403,11 +403,11 @@
|
|||||||
=== "pushFirst()"
|
=== "pushFirst()"
|
||||||

|

|
||||||
|
|
||||||
=== "pollLast()"
|
=== "popLast()"
|
||||||

|

|
||||||
|
|
||||||
=== "pollFirst()"
|
=== "popFirst()"
|
||||||

|

|
||||||
|
|
||||||
以下是具体实现代码。
|
以下是具体实现代码。
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 61 KiB |
BIN
docs/chapter_stack_and_queue/queue.assets/array_queue_pop.png
Normal file
After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
@ -8,15 +8,15 @@
|
|||||||
|
|
||||||
## 队列常用操作
|
## 队列常用操作
|
||||||
|
|
||||||
队列的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。
|
队列的常用操作见下表。需要注意,不同编程语言的方法名是不同的,在这里我们采用与栈相同的方法命名。
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法名 | 描述 | 时间复杂度 |
|
| 方法名 | 描述 | 时间复杂度 |
|
||||||
| --------- | -------------------------- | -------- |
|
| --------- | -------------------------- | -------- |
|
||||||
| push() | 元素入队,即将元素添加至队尾 | $O(1)$ |
|
| push() | 元素入队,即将元素添加至队尾 | $O(1)$ |
|
||||||
| poll() | 队首元素出队 | $O(1)$ |
|
| pop() | 队首元素出队 | $O(1)$ |
|
||||||
| peek() | 访问队首元素 | $O(1)$ |
|
| peek() | 访问队首元素 | $O(1)$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -39,7 +39,7 @@
|
|||||||
int peek = queue.peek();
|
int peek = queue.peek();
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.poll();
|
int pop = queue.poll();
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.size();
|
int size = queue.size();
|
||||||
@ -120,8 +120,8 @@
|
|||||||
peek := queue.Front()
|
peek := queue.Front()
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
poll := queue.Front()
|
pop := queue.Front()
|
||||||
queue.Remove(poll)
|
queue.Remove(pop)
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
size := queue.Len()
|
size := queue.Len()
|
||||||
@ -149,7 +149,7 @@
|
|||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
||||||
const poll = queue.shift();
|
const pop = queue.shift();
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.length;
|
const size = queue.length;
|
||||||
@ -177,7 +177,7 @@
|
|||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
// 底层是数组,因此 shift() 方法的时间复杂度为 O(n)
|
||||||
const poll = queue.shift();
|
const pop = queue.shift();
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
const size = queue.length;
|
const size = queue.length;
|
||||||
@ -209,7 +209,7 @@
|
|||||||
int peek = queue.Peek();
|
int peek = queue.Peek();
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
int poll = queue.Dequeue();
|
int pop = queue.Dequeue();
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
int size = queue.Count();
|
int size = queue.Count();
|
||||||
@ -236,7 +236,7 @@
|
|||||||
let peek = queue.first!
|
let peek = queue.first!
|
||||||
|
|
||||||
/* 元素出队 */
|
/* 元素出队 */
|
||||||
// 使用 Array 模拟时 poll 的复杂度为 O(n)
|
// 由于是数组,因此 removeFirst 的复杂度为 O(n)
|
||||||
let pool = queue.removeFirst()
|
let pool = queue.removeFirst()
|
||||||
|
|
||||||
/* 获取队列的长度 */
|
/* 获取队列的长度 */
|
||||||
@ -266,8 +266,8 @@
|
|||||||
=== "push()"
|
=== "push()"
|
||||||

|

|
||||||
|
|
||||||
=== "poll()"
|
=== "pop()"
|
||||||

|

|
||||||
|
|
||||||
以下是使用链表实现队列的示例代码。
|
以下是使用链表实现队列的示例代码。
|
||||||
|
|
||||||
@ -350,8 +350,8 @@
|
|||||||
=== "push()"
|
=== "push()"
|
||||||

|

|
||||||
|
|
||||||
=== "poll()"
|
=== "pop()"
|
||||||

|

|
||||||
|
|
||||||
细心的同学可能会发现一个问题:在不断入队与出队的过程中,`front` 和 `rear` 都在向右移动,**在到达数组尾部后就无法继续移动了**。为解决此问题,**我们考虑将数组看作是首尾相接的**,这样的数组被称为「环形数组」。
|
细心的同学可能会发现一个问题:在不断入队与出队的过程中,`front` 和 `rear` 都在向右移动,**在到达数组尾部后就无法继续移动了**。为解决此问题,**我们考虑将数组看作是首尾相接的**,这样的数组被称为「环形数组」。
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
## 栈常用操作
|
## 栈常用操作
|
||||||
|
|
||||||
栈的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。
|
栈的常用操作见下表,方法名需根据编程语言来确定,此处我们以常见的 `push` , `pop` , `peek` 为例。
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
|