Ниже приведен код, который я написал для реализации стека с использованием структуры данных связанного списка.Я понимаю концепции структуры данных, но я довольно новичок в использовании указателей и, следовательно, испытываю проблемы с реализацией.
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE{
int data;
struct NODE *next;
}NODE;
NODE *top=NULL;
NODE *newNode=NULL;
NODE createNode();
void push(NODE *newNode, int element);
int pop();
void display();
int main()
{
int element,choice,p_item;
do
{
printf("\nWhat operation would you like to perform on stack?\n1.Push\n2.Pop\n3.Display\n4.Exit\n");
printf("\nEnter your choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("\nScan an element to push on stack: ");
scanf("%d",&element);
push(newNode, element);
break;
case 2: p_item=pop();
printf("\nThe popped item is %d.\n",p_item);
break;
case 3: display();
break;
case 4: exit(0);
break;
default: printf("\nWrong Choice!!Enter Again!\n");
}
}while(choice!=4);
return 0;
}
int pop()
{
if(top==NULL)
{
printf("\nStack UnderFlow!\n");
return 0;
}
NODE *temp=top;
int p_item;
p_item=top->data;
top=top->next;
free(temp);
return p_item;
}
void display()
{
if(top == NULL)
printf("\nStack UnderFlow!\n");
else
{
NODE* temp = top;
while(temp->next != NULL)
{
printf("%d--->",temp->data);
temp=temp->next;
}
printf("%d--->NULL",temp->data);
}
}
В большинстве случаев написанный выше код верен, единственное место, где возникают проблемы, это следующий раздел:
NODE createNode()
{ NODE *node;
node=(NODE*)malloc(sizeof(NODE));
return node; //line 54
}
В вышеприведенной функции я считаю, что я делаю;объявив узел, выделив ему память и вернув указатель.Но, видимо, код неправильный, и мои знания ограничены, чтобы понять, что я делаю неправильно.
void push(NODE *newNode, int element)
{
newNode=createNode(); //line 59
// newNode=(NODE*)malloc(sizeof(NODE));
newNode->data=element;
if(top==NULL)
{
newNode->next=NULL;
top=newNode;
return;
}
newNode->next=top;
top=newNode;
}
В приведенном выше коде, если я опущу
newNode=createNode();
и раскомментируем следующую строку,
newNode=(NODE*)malloc(sizeof(NODE));
Тогда я могу без проблем выполнить всю программу целиком, но для реализации других концепций структуры данных мне хотелось бы понять, в чем проблема.
Ниже приведена ошибка:
stack_using_linked_list.c: In function ‘createNode’:
stack_using_linked_list.c:54:12: error: incompatible types when returning type ‘NODE * {aka struct NODE *}’ but ‘NODE {aka struct NODE}’ was expected
return node;
^
stack_using_linked_list.c: In function ‘push’:
stack_using_linked_list.c:59:12: error: incompatible types when assigning to type ‘NODE * {aka struct NODE *}’ from type ‘NODE {aka struct NODE}’
newNode=createNode();
Спасибо, что нашли время прочитать.