У меня возникли проблемы с функцией pop()
в этой программе.Это реализация стека в виде односвязного списка, и, как вы можете видеть, функция pop имеет два аргумента:
void pop (STACK * stack, char ** name)
Мне сказали: выделите память для name
в функции pop
и верните name
или NULL
, используя аргумент **name
.Я пробовал несколько вещей, но я не понимаю, что это на самом деле означает, а также как это сделать, поскольку функция ничего не возвращает (тип void
).Обычно у меня возникают проблемы с пониманием этого аргумента **name
, и почему мы вообще хотим использовать его в первую очередь.Вот мой код:
typedef struct _stack STACK;
typedef struct _sElem stackElement;
struct _stack{
stackElement *head;
};
struct _sElem{
char *name;
stackElement *next;
};
//solved:
void pop(STACK *stack, char **name){
if(stack == NULL || stack->head == NULL){
printf("Stack is empty. \n");
}else{
stackElement *temp = stack->head;
char **nodeName = malloc(sizeof(char*));
char *tempName = temp->name;
(*nodeName)=tempName;
(*name) = (*nodeName);
stack->head = temp->next;
free(temp);
}
}
int main(){
STACK *myStack = NULL;
char *tempName = NULL;
push(myStack, "One");
push(myStack, "Two");
push(myStack, "Three");
pop(myStack, &tempName);
pop(myStack, &tempName);
//free stack and tempName
return 0;
}
Я ценю любую помощь.Благодаря.