私は構造に新しく、スタックにデータをプッシュしてそれらを印刷する操作をスタックに実装しようとしています。しかし、私はいくつかの問題に遭遇しました。Cのスタックのデータ構造
コードが正しくコンパイルされたtutorialpointsが提供するコンパイラを使用しましたが、出力に「PushNode」または「PrintStackData」に存在すると想定されるセグメンテーションエラーが含まれています。
、いつI出力(カウンタを使用して)スタック内のノードの数、数が正しいものより1であるが、I入力5つのデータを言うが、それは6
はどうもありがとうございまし出力します!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//Define data node
typedef struct Node{
int data; //Data of data node in Stack
struct Node *Next; // Pointer pointing to next data node or null
}NODE;
//Define head node for stack
typedef struct StackHead{
int Counter;
NODE *Top;
}STACKHEAD;
// function to create a blank stack
void CreateStack(STACKHEAD *Head){
Head= (STACKHEAD*)malloc(sizeof(STACKHEAD));
Head->Counter=0;
Head->Top = NULL;
};
//Function to push a data node in stack
void PushNode(STACKHEAD *Head){
NODE *pNew=(NODE*)malloc(sizeof(NODE)); //Must allocate memory to initialise it otherwise segmentation error.
printf("Enter value for new data Node: ");
scanf("%d",&(pNew->data)); //Assign input to data of new node
if(Head->Top==NULL){
pNew->Next=NULL;
}
else{
pNew->Next=Head->Top;
}
Head->Top=pNew;
Head->Counter++;
};
//Function to print out each data node in the Stack
void PrintStackData(STACKHEAD *Head){
STACKHEAD *Position=(STACKHEAD*)malloc(sizeof(STACKHEAD));
//Position->Top=Head->Top;
Position = Head;
printf("The data in the Stack is: ");
while(Position->Top!=NULL){
printf("%d, ",Position->Top->data);
Position->Top= Position->Top->Next;
}
}
int main()
{
int numOfData; // Number of data that users want to insert into the stack
STACKHEAD *Head; //Declare and initialise a new Stack Head
CreateStack(Head); // Initialise the Stack
printf("How many data do you want to insert to the Stack?");
scanf("%d", &numOfData);
for(int i=0;i<numOfData;i++){
PushNode(Head);
}
printf("The data value of the top Node is %d\n", Head->Top->data);
PrintStackData(Head); //print out each data node in Stack using function.
printf("\nThe number of data in the Stack is: %d\t", Head->Counter);
printf("\nThe data value of the top Node is %d\t", Head->Top->data);
getchar();
}
c *の*を参照してパスをエミュレートすることを検索して読んでください。または関数から値を返す方法。 –
"私のコードをデバッグしてください"という質問はトピック外です/許可されていません。 –
'Head'は初期化されていません。 'CreateStack'関数内の' Head'に代入しても、呼び出し元の変数は変更されません。 – Barmar