如何实现将初始栈元素按奇偶分入对应栈并删除原元素?
栈元素分类实现方案
核心思路
利用你已实现的链表栈操作函数,按以下步骤完成分类:
- 调用
create_stack()分别创建空的偶数栈(even_stack)和奇数栈(odd_stack) - 循环处理初始栈,直到初始栈为空:
- 弹出初始栈的栈顶元素
- 根据元素奇偶性,将其推入对应的偶数栈或奇数栈
- 最后可通过
print_stack()验证三个栈的状态
修改后的Testing函数示例
假设你已有的栈函数定义如下(基于你提供的实现):
// 栈节点结构 typedef struct Node { int data; struct Node* next; } Node; // 栈结构 typedef struct Stack { Node* top; } Stack; // 创建空栈 Stack* create_stack() { Stack* stack = (Stack*)malloc(sizeof(Stack)); stack->top = NULL; return stack; } // 入栈操作 void push(Stack* stack, int data) { Node* new_node = (Node*)malloc(sizeof(Node)); new_node->data = data; new_node->next = stack->top; stack->top = new_node; } // 出栈操作,返回栈顶元素,栈为空时返回-1(可根据需求调整) int pop(Stack* stack) { if (stack->top == NULL) { printf("Stack underflow\n"); return -1; } Node* temp = stack->top; int data = temp->data; stack->top = stack->top->next; free(temp); return data; } // 打印栈元素(从栈顶到栈底) void print_stack(Stack* stack) { Node* current = stack->top; printf("Stack: "); while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); }
以下是修正后的测试函数:
void testing() { // 创建初始栈并推入测试元素 Stack* initial_stack = create_stack(); push(initial_stack, 1); push(initial_stack, 2); push(initial_stack, 3); push(initial_stack, 4); push(initial_stack, 5); printf("初始栈状态:"); print_stack(initial_stack); // 预期输出:Stack: 5 4 3 2 1 // 创建偶数栈和奇数栈 Stack* even_stack = create_stack(); Stack* odd_stack = create_stack(); // 循环处理初始栈元素 while (initial_stack->top != NULL) { int val = pop(initial_stack); if (val % 2 == 0) { push(even_stack, val); } else { push(odd_stack, val); } } // 打印结果验证 printf("处理后初始栈状态:"); print_stack(initial_stack); // 预期输出:Stack: printf("偶数栈状态:"); print_stack(even_stack); // 预期输出:Stack: 4 2 printf("奇数栈状态:"); print_stack(odd_stack); // 预期输出:Stack: 5 3 1 }
关键说明
- 循环终止条件判断
initial_stack->top != NULL,确保初始栈的所有元素都被处理 - 每次通过
pop()取出初始栈元素,直接推入对应栈,同时完成初始栈元素的删除,符合你“每完成一次推入就删除初始栈元素”的要求 - 如果需要偶数栈/奇数栈的元素顺序和初始栈中出现的顺序一致(比如初始栈中偶数是2、4,希望偶数栈栈顶是2),可以额外对even_stack/odd_stack做一次反转,或者在处理时用临时容器暂存元素后再反向推入
内容的提问来源于stack exchange,提问作者Klau
相关产品推荐
相关产品推荐

