mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 22:28:40 +08:00 
			
		
		
		
	A bug fix.
This commit is contained in:
		@ -66,11 +66,12 @@ void push(ArrayQueue *queue, int num) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 出队 */
 | 
					/* 出队 */
 | 
				
			||||||
void pop(ArrayQueue *queue) {
 | 
					int 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;
 | 
				
			||||||
    queue->queSize--;
 | 
					    queue->queSize--;
 | 
				
			||||||
 | 
					    return num;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Driver Code */
 | 
					/* Driver Code */
 | 
				
			||||||
@ -93,7 +94,7 @@ int main() {
 | 
				
			|||||||
    printf("队首元素 peek = %d\r\n", peekNum);
 | 
					    printf("队首元素 peek = %d\r\n", peekNum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出队 */
 | 
					    /* 元素出队 */
 | 
				
			||||||
    pop(queue);
 | 
					    peekNum = pop(queue);
 | 
				
			||||||
    printf("出队元素 pop = %d ,出队后 queue = ", peekNum);
 | 
					    printf("出队元素 pop = %d ,出队后 queue = ", peekNum);
 | 
				
			||||||
    printArray(queue->nums, queue->queSize);
 | 
					    printArray(queue->nums, queue->queSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@ bool isEmpty(ArrayStack *stack) {
 | 
				
			|||||||
/* 入栈 */
 | 
					/* 入栈 */
 | 
				
			||||||
void push(ArrayStack *stack, int num) {
 | 
					void push(ArrayStack *stack, int num) {
 | 
				
			||||||
    if (stack->size == MAX_SIZE) {
 | 
					    if (stack->size == MAX_SIZE) {
 | 
				
			||||||
        printf("stack is full.\n");
 | 
					        printf("栈已满\n");
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stack->data[stack->size] = num;
 | 
					    stack->data[stack->size] = num;
 | 
				
			||||||
@ -52,7 +52,7 @@ void push(ArrayStack *stack, int num) {
 | 
				
			|||||||
/* 访问栈顶元素 */
 | 
					/* 访问栈顶元素 */
 | 
				
			||||||
int peek(ArrayStack *stack) {
 | 
					int peek(ArrayStack *stack) {
 | 
				
			||||||
    if (stack->size == 0) {
 | 
					    if (stack->size == 0) {
 | 
				
			||||||
        printf("stack is empty.\n");
 | 
					        printf("栈为空\n");
 | 
				
			||||||
        return INT_MAX;
 | 
					        return INT_MAX;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return stack->data[stack->size - 1];
 | 
					    return stack->data[stack->size - 1];
 | 
				
			||||||
@ -60,10 +60,6 @@ int peek(ArrayStack *stack) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* 出栈 */
 | 
					/* 出栈 */
 | 
				
			||||||
int pop(ArrayStack *stack) {
 | 
					int pop(ArrayStack *stack) {
 | 
				
			||||||
    if (stack->size == 0) {
 | 
					 | 
				
			||||||
        printf("stack is empty.\n");
 | 
					 | 
				
			||||||
        return INT_MAX;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    int val = peek(stack);
 | 
					    int val = peek(stack);
 | 
				
			||||||
    stack->size--;
 | 
					    stack->size--;
 | 
				
			||||||
    return val;
 | 
					    return val;
 | 
				
			||||||
 | 
				
			|||||||
@ -67,12 +67,13 @@ int peek(LinkedListQueue *queue) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 出队 */
 | 
					/* 出队 */
 | 
				
			||||||
void pop(LinkedListQueue *queue) {
 | 
					int pop(LinkedListQueue *queue) {
 | 
				
			||||||
    int num = peek(queue);
 | 
					    int num = peek(queue);
 | 
				
			||||||
    ListNode *tmp = queue->front;
 | 
					    ListNode *tmp = queue->front;
 | 
				
			||||||
    queue->front = queue->front->next;
 | 
					    queue->front = queue->front->next;
 | 
				
			||||||
    free(tmp);
 | 
					    free(tmp);
 | 
				
			||||||
    queue->queSize--;
 | 
					    queue->queSize--;
 | 
				
			||||||
 | 
					    return num;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 打印队列 */
 | 
					/* 打印队列 */
 | 
				
			||||||
@ -108,7 +109,7 @@ int main() {
 | 
				
			|||||||
    printf("队首元素 peek = %d\r\n", peekNum);
 | 
					    printf("队首元素 peek = %d\r\n", peekNum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出队 */
 | 
					    /* 元素出队 */
 | 
				
			||||||
    pop(queue);
 | 
					    peekNum = pop(queue);
 | 
				
			||||||
    printf("出队元素 pop = %d ,出队后 queue = ", peekNum);
 | 
					    printf("出队元素 pop = %d ,出队后 queue = ", peekNum);
 | 
				
			||||||
    printLinkedListQueue(queue);
 | 
					    printLinkedListQueue(queue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,26 +32,16 @@ void delLinkedListStack(LinkedListStack *s) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* 获取栈的长度 */
 | 
					/* 获取栈的长度 */
 | 
				
			||||||
int size(LinkedListStack *s) {
 | 
					int size(LinkedListStack *s) {
 | 
				
			||||||
    assert(s);
 | 
					 | 
				
			||||||
    return s->size;
 | 
					    return s->size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 判断栈是否为空 */
 | 
					/* 判断栈是否为空 */
 | 
				
			||||||
bool isEmpty(LinkedListStack *s) {
 | 
					bool isEmpty(LinkedListStack *s) {
 | 
				
			||||||
    assert(s);
 | 
					 | 
				
			||||||
    return size(s) == 0;
 | 
					    return size(s) == 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 访问栈顶元素 */
 | 
					 | 
				
			||||||
int peek(LinkedListStack *s) {
 | 
					 | 
				
			||||||
    assert(s);
 | 
					 | 
				
			||||||
    assert(size(s) != 0);
 | 
					 | 
				
			||||||
    return s->top->val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 入栈 */
 | 
					/* 入栈 */
 | 
				
			||||||
void push(LinkedListStack *s, int num) {
 | 
					void push(LinkedListStack *s, int num) {
 | 
				
			||||||
    assert(s);
 | 
					 | 
				
			||||||
    ListNode *node = (ListNode *)malloc(sizeof(ListNode));
 | 
					    ListNode *node = (ListNode *)malloc(sizeof(ListNode));
 | 
				
			||||||
    node->next = s->top; // 更新新加节点指针域
 | 
					    node->next = s->top; // 更新新加节点指针域
 | 
				
			||||||
    node->val = num;     // 更新新加节点数据域
 | 
					    node->val = num;     // 更新新加节点数据域
 | 
				
			||||||
@ -59,13 +49,17 @@ void push(LinkedListStack *s, int num) {
 | 
				
			|||||||
    s->size++;           // 更新栈大小
 | 
					    s->size++;           // 更新栈大小
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 出栈 */
 | 
					/* 访问栈顶元素 */
 | 
				
			||||||
int pop(LinkedListStack *s) {
 | 
					int peek(LinkedListStack *s) {
 | 
				
			||||||
    if (s->size == 0) {
 | 
					    if (s->size == 0) {
 | 
				
			||||||
        printf("stack is empty.\n");
 | 
					        printf("栈为空\n");
 | 
				
			||||||
        return INT_MAX;
 | 
					        return INT_MAX;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    assert(s);
 | 
					    return s->top->val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 出栈 */
 | 
				
			||||||
 | 
					int pop(LinkedListStack *s) {
 | 
				
			||||||
    int val = peek(s);
 | 
					    int val = peek(s);
 | 
				
			||||||
    ListNode *tmp = s->top;
 | 
					    ListNode *tmp = s->top;
 | 
				
			||||||
    s->top = s->top->next;
 | 
					    s->top = s->top->next;
 | 
				
			||||||
 | 
				
			|||||||
@ -56,11 +56,12 @@ class ArrayQueue {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 出队 */
 | 
					    /* 出队 */
 | 
				
			||||||
    void pop() {
 | 
					    int pop() {
 | 
				
			||||||
        int num = peek();
 | 
					        int num = peek();
 | 
				
			||||||
        // 队首指针向后移动一位,若越过尾部则返回到数组头部
 | 
					        // 队首指针向后移动一位,若越过尾部则返回到数组头部
 | 
				
			||||||
        front = (front + 1) % queCapacity;
 | 
					        front = (front + 1) % queCapacity;
 | 
				
			||||||
        queSize--;
 | 
					        queSize--;
 | 
				
			||||||
 | 
					        return num;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 访问队首元素 */
 | 
					    /* 访问队首元素 */
 | 
				
			||||||
@ -101,7 +102,7 @@ int main() {
 | 
				
			|||||||
    cout << "队首元素 peek = " << peek << endl;
 | 
					    cout << "队首元素 peek = " << peek << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出队 */
 | 
					    /* 元素出队 */
 | 
				
			||||||
    queue->pop();
 | 
					    peek = queue->pop();
 | 
				
			||||||
    cout << "出队元素 pop = " << peek << ",出队后 queue = ";
 | 
					    cout << "出队元素 pop = " << peek << ",出队后 queue = ";
 | 
				
			||||||
    printVector(queue->toVector());
 | 
					    printVector(queue->toVector());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,9 +28,10 @@ class ArrayStack {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 出栈 */
 | 
					    /* 出栈 */
 | 
				
			||||||
    void pop() {
 | 
					    int pop() {
 | 
				
			||||||
        int oldTop = top();
 | 
					        int num = top();
 | 
				
			||||||
        stack.pop_back();
 | 
					        stack.pop_back();
 | 
				
			||||||
 | 
					        return num;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 访问栈顶元素 */
 | 
					    /* 访问栈顶元素 */
 | 
				
			||||||
@ -65,7 +66,7 @@ int main() {
 | 
				
			|||||||
    cout << "栈顶元素 top = " << top << endl;
 | 
					    cout << "栈顶元素 top = " << top << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出栈 */
 | 
					    /* 元素出栈 */
 | 
				
			||||||
    stack->pop();
 | 
					    top = stack->pop();
 | 
				
			||||||
    cout << "出栈元素 pop = " << top << ",出栈后 stack = ";
 | 
					    cout << "出栈元素 pop = " << top << ",出栈后 stack = ";
 | 
				
			||||||
    printVector(stack->toVector());
 | 
					    printVector(stack->toVector());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -52,7 +52,7 @@ class LinkedListQueue {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 出队 */
 | 
					    /* 出队 */
 | 
				
			||||||
    void pop() {
 | 
					    int pop() {
 | 
				
			||||||
        int num = peek();
 | 
					        int num = peek();
 | 
				
			||||||
        // 删除头节点
 | 
					        // 删除头节点
 | 
				
			||||||
        ListNode *tmp = front;
 | 
					        ListNode *tmp = front;
 | 
				
			||||||
@ -60,6 +60,7 @@ class LinkedListQueue {
 | 
				
			|||||||
        // 释放内存
 | 
					        // 释放内存
 | 
				
			||||||
        delete tmp;
 | 
					        delete tmp;
 | 
				
			||||||
        queSize--;
 | 
					        queSize--;
 | 
				
			||||||
 | 
					        return num;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 访问队首元素 */
 | 
					    /* 访问队首元素 */
 | 
				
			||||||
@ -100,7 +101,7 @@ int main() {
 | 
				
			|||||||
    cout << "队首元素 peek = " << peek << endl;
 | 
					    cout << "队首元素 peek = " << peek << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出队 */
 | 
					    /* 元素出队 */
 | 
				
			||||||
    queue->pop();
 | 
					    peek = queue->pop();
 | 
				
			||||||
    cout << "出队元素 pop = " << peek << ",出队后 queue = ";
 | 
					    cout << "出队元素 pop = " << peek << ",出队后 queue = ";
 | 
				
			||||||
    printVector(queue->toVector());
 | 
					    printVector(queue->toVector());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,13 +42,14 @@ class LinkedListStack {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 出栈 */
 | 
					    /* 出栈 */
 | 
				
			||||||
    void pop() {
 | 
					    int pop() {
 | 
				
			||||||
        int num = top();
 | 
					        int num = top();
 | 
				
			||||||
        ListNode *tmp = stackTop;
 | 
					        ListNode *tmp = stackTop;
 | 
				
			||||||
        stackTop = stackTop->next;
 | 
					        stackTop = stackTop->next;
 | 
				
			||||||
        // 释放内存
 | 
					        // 释放内存
 | 
				
			||||||
        delete tmp;
 | 
					        delete tmp;
 | 
				
			||||||
        stkSize--;
 | 
					        stkSize--;
 | 
				
			||||||
 | 
					        return num;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 访问栈顶元素 */
 | 
					    /* 访问栈顶元素 */
 | 
				
			||||||
@ -89,7 +90,7 @@ int main() {
 | 
				
			|||||||
    cout << "栈顶元素 top = " << top << endl;
 | 
					    cout << "栈顶元素 top = " << top << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素出栈 */
 | 
					    /* 元素出栈 */
 | 
				
			||||||
    stack->pop();
 | 
					    top = stack->pop();
 | 
				
			||||||
    cout << "出栈元素 pop = " << top << ",出栈后 stack = ";
 | 
					    cout << "出栈元素 pop = " << top << ",出栈后 stack = ";
 | 
				
			||||||
    printVector(stack->toVector());
 | 
					    printVector(stack->toVector());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -43,4 +43,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
本书倡导手脑并用的学习方式,在这一点上深受[《动手学深度学习》](https://github.com/d2l-ai/d2l-zh)的启发。在此向各位读者强烈推荐这本优秀的著作。
 | 
					本书倡导手脑并用的学习方式,在这一点上深受[《动手学深度学习》](https://github.com/d2l-ai/d2l-zh)的启发。在此向各位读者强烈推荐这本优秀的著作。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。
 | 
					**衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事**。
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user