所以我有一个链表列表作为C.中的不透明对象。传入一个指向该函数的头指针指针。
这是删除头功能的代码。我叫它流行
MY_STACK pop(MY_STACK* head) {
Node_ptr hHead = (Node_ptr)head;
if (*head == NULL){
printf("badness \n");
return FAILURE;
}
hHead = hHead->next;
return SUCCESS;
}
这不起作用。它不会删除头节点。我其实可以。但是当我这样做时,头节点没有切换到下一个,程序崩溃,因为没有头大声笑。如何将头部切换到下一个。因为它不起作用。这是一个节点指针指针。它是名为MY_STACK
的节点的公共版本。我不知道你对不透明物体有多熟悉,但为此我需要像这样做。我不能把eveythign放在一起我知道如何删除头部但是这里没有工作
这是MY_STACK头文件。 Node_ptr是私有版本,它包含相同的东西+数据和下一个字段。我必须将MY_sTACK转换为Node_ptr以访问这些内容。
#ifndef MY_STACK_H
#define MY_STACK_H
#include "my_status.h"
enum boolean {FALSE, TRUE};
typedef enum boolean Bool;
struct my_stack_public;
typedef struct my_stack_public* MY_STACK;
struct my_stack_public
{
void (*destroy)(MY_STACK* phMy_stack);
Status (*push)(MY_STACK* hMy_stack, char item);
Status (*pop)(MY_STACK* hMy_stack);
char (*top)(MY_STACK hMy_stack);
Bool (*empty)(MY_STACK hMy_stack);
};
MY_STACK my_stack_init_default(void);
#endif
我有一个有效的插入功能。它改变了头脑。但由于某种原因,pop功能没有这样做
答案 0 :(得分:2)
该函数的返回类型为MY_STACK
。我怀疑它是指向节点的指针的typedef。因此该函数必须返回一个指向节点的指针。
它可以看作以下方式
MY_STACK pop( MY_STACK *head )
{
MY_STACK node = *head;
if ( *head != NULL ) *head = ( *head )->next;
return node;
}
如果函数必须删除当前头的节点并返回操作是成功还是失败,那么函数可能看起来像
int pop( MY_STACK *head )
{
if ( *head != NULL )
{
MY_STACK node = *head;
*head = ( *head )->next;
free( node );
return SUCCESS;
}
else
{
return FAILURE;
}
}
其中SUCCESS和FAILURE是一些整数常量。
答案 1 :(得分:-1)
建议使用指针MY_STACK
作为返回类型,试试这个:
MY_STACK pop(MY_STACK* head) {
MY_STACK tmpHead = *head;
if ((*head) == NULL) {
printf("badness\n");
return NULL;
} else {
*head = (*head)->next;
tmpHead -> next = NULL;
return tmpHead;
}
}