そのため、リンクされたリスト スタックを C の不透明なオブジェクトとして使用しています。関数へのヘッド ポインター ポインターを渡しています。
これは、delete head 関数のコードです。ポップと呼んでいます
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
。不透明なオブジェクトにどれだけ精通しているかはわかりませんが、このためにはこのようにする必要があります。私はすべてをまとめることができません。それで頭の削除を行う方法を知っていますが、ここでは機能しません
これは 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 関数はそれを行いません