PNTは、それはあなたが他のコードからこの宣言が欠落している
struct stack
{
int value;
struct stos *w; // struct stos should struct stack
};
によって宣言打たスタックを指し、
struct stack *pnt;
struct stack *prev;
ポインタです。
問題2つの構造体:
typedef struct stos{
int value;
struct stos *next;
} stos;
だから、これは
は私たちが
まずSTOSの混乱を修正し始めましょう...問題、問題をたくさん持っているコードを上昇させます同じタイプの構造体へのポインタを含むstruct stack
の代わりに、未定義の構造体を探しています(struct stos *next;
)struct stack* next;
これで、スタックがスタック構造の個別にリンクされたリストとして保持されることがわかりました。それは、変数の名前としてキーワードnew
を使用しているため
のはvoid push(int x)
void push(int x)
{
// point prev to pnt, previous to top of stack
prev = pnt;
// create a new item to place on the top of the stack
pnt = (struct stack*)malloc(sizeof(struct stack));
// initial the value member of the new item with x
pnt->value=x;
// point the new item's link point to point the previous top of the stack
pnt->w = prev;
// print the value contained in the new top of the stack item.
printf("Top of stack: %d\n", pnt->value);
}
を解読してみましょう。この関数では、災害です。はい、new
はC++にあります。しかし、なぜ次の人のために物事の混乱を作る。次のように
void delete(struct stos *new)
{
if (new!=NULL)
{
prev = new->w;
printf("Deleted: %d\n", new->value);
free(new);
pnt = prev;
}
else printf("Stack is empty\n");
}
は、Stack *pnt
対Stack* pnt
が言う "スタックを指すポインタと呼ばれるPNT" 対 "PNTと呼ばれるAスタックポインタ" を使用して...
// forward declaration of Stos because it won't be defined until the end of struct it is used in.
typedef struct {
int value;
struct Stack* next;
} Stack;
Stack* pnt; // pnt = pointer top of stack
Stack* prev; // prev = pointer to the previous stack item
を書かれている必要があります。 (これらの宣言を読むのに渦巻きのテクニックがあります。Q.E.D)
void delete(Stack* pNew)
{
if (pNew)
{
prev = pNew->w;
printf("Deleted: %d\n", pNew->value);
free(pNew);
pnt = prev;
}
else printf("Stack is empty\n");
}
私が言ったように、これは混乱です。 重要なことは、質問をして、次のコードに役立ついくつかのことを覚えていることです。
一度typedefを作成して使用します。
十分な長さ、将来の読者はStack* pTopOfStack;
は、デリバティブのキーワードである単語を使用しないようにしよう、コードを理解するように変数の名前を作るstruct stack
ものをドロップnew
ないオーバーを実行します。群集冗長コードとコードif (new)
対
if (new != NULL)
、より良いですif (pNewStackItem)
正しく見える、コンパイルされて実行されるより多くのもので複雑になるのではなく、コードが何をしているのかを完全に理解することをお勧めします。プログラマーを信頼してはいけません。「申し訳ありませんが、私のマシン上で動作します。
Googleを使用する方がよいでしょう。 – Aditya
'struct stos' ?? –
@Weather Vane私の悪い、編集 –