Я реализовал рабочий в C с реализацией в вашем коде, вы можете увидеть ниже.Я добавил int checkEven(int stack[], int stackSize)
функцию, которая контролирует массив, если есть какое-либо четное число или нет.Если нет, то завершите проблему с возвратом 0 или любого другого кода ошибки, с другой стороны, если есть четное число, он возвращает его индекс и функция deleteEven
проведет пальцем по массиву (stack
).Это работает для size of 5
массива, но вы можете это исправить.Для простоты тестирования я использую 5.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 5
int top = -1;
int stack[MAX];
void deleteEven(int num[], int indexOfEven);
int checkEven(int stack[], int stackSize);
int main() {
int num[5];
int i, size;
printf("\n-----------------\n\n");
printf("Enter size of array: ");
scanf("%d", &size);
for (i = 0; i < size; i++) {
printf("Enter number: ");
scanf("%d", &num[i]);
top++;
stack[top] = num[i];
}
printf("\nList: ");
for (i = 0; i < size; i++) {
printf("%d, ", num[i]);
}
printf("\n===stack===");
for( i = 0; i <size; i++){
printf("%d ", stack[i]);
}
int indexOfEven = checkEven(stack,5);
if(indexOfEven >= 0){
printf("This sequence has even number");
printf("the index => %d ",indexOfEven);
deleteEven(stack, indexOfEven);
}else{
printf("this sequence has no even number");
/*
no even number
exit
*/
return 0;
}
return 0;
}
int checkEven(int stack[], int stackSize){
for(int i = stackSize - 1; i >= 0; i--){
if(stack[i] % 2 == 0){
return i;
}
}
return -1;
}
void deleteEven(int num[], int indexOfEven) {
int simpleArray[5];
for(int t = 0; t < 5; t++){
simpleArray[t] = num[t];
}
int c;
for (c = indexOfEven; c < 4; c++)
simpleArray[c] = num[c+1];
for (c = 0; c < 4; c++){
printf("\n%d\n", simpleArray[c]);
}
}
Пока что вы видите реализацию O(n)
с массивом, но вы описываете, что хотите реализовать ее с помощью механизма стека push() - pop() - peek()
.Я хочу написать код sudo для полной реализации Stack
.
let it inputs be 1 - 2 - 3 - 5 - 7
describe inputSize
describe mainStack
describe helperStack
read inputs to mainStack
показать стеки
mainStack -> [1-2-3-5-7]
helperStack -> []
while mainStack.peek() != NULL :
if mainStack.peek() % 2 == 0: // even number
mainStack.pop()
break the loop
else:
describe popValue = mainStack.pop()
helperStack.push( popValue )
if inputSize == helperStack:
// no even number
// so nothing break the loop, every value is odd so, all there is another stack
// finish program with error code or return main array / inputs
показать стеки
mainStack -> [ 1 ]
helperStack -> [ 3 5 7 ]
сейчас pop()
все helperStack
и нажатьmainStack
while helperStack.peek() != NULL:
mainStack.push( helperStack.pop() )
Показать стеки
mainStack -> [ 1 3 5 7 ]
helperStack -> [ ]
Вернуть mainStack
в качестве формата массива.