hello everybody!
I wrote simple functions to manage a stack, which I had already used and which I saw are very similar (let's say identical) to those shown in Deitel's book:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct stackNode{
char data;
struct StackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;
void push (StackNodePtr *topPtr, char value);
char pop (StackNodePtr *topPtr);
int isEmpty(StackNodePtr topPtr);
void printStack (StackNodePtr topPtr);
int main()
{
srand(time(NULL));
int i;
StackNodePtr topPtr=NULL;
for (i=0;i<10;i++)
{
push (&topPtr,'a'+rand()%26);
printStack(topPtr);
}
for (i=0;i<10;i++)
{
pop (&topPtr);
printStack(topPtr);
}
}
void push (StackNodePtr *topPtr,char value)
{
StackNodePtr newPtr = (StackNodePtr)malloc(sizeof(StackNode));
if (newPtr!=NULL)
{
newPtr->data=value;
newPtr->nextPtr=*topPtr;
*topPtr=newPtr;
}
else
{
printf("Program run out of memory\n");
}
}
char pop (StackNodePtr *topPtr)
{
if (*topPtr==NULL)
{
return 0;
}
else
{
StackNodePtr tmpPtr=*topPtr;
char ret = tmpPtr->data;
*topPtr=tmpPtr->nextPtr;
free(tmpPtr);
return ret;
}
}
int isEmpty(StackNodePtr topPtr)
{
return topPtr==NULL;
}
void printStack (StackNodePtr topPtr)
{
if (topPtr==NULL)
{
printf("Stack is empty\n");
}
else
{
while (topPtr!=NULL)
{
printf(" %c -->",topPtr->data);
topPtr=topPtr->nextPtr;
}
printf(" NULL\n\n");
}
}
after compiling i got this warning:
Code:
gcc e12_12.c -o e12_12
e12_12.c: In function ‘push’:
e12_12.c:43: warning: assignment from incompatible pointer type
e12_12.c: In function ‘pop’:
e12_12.c:63: warning: assignment from incompatible pointer type
e12_12.c: In function ‘printStack’:
e12_12.c:100: warning: assignment from incompatible pointer type
it doesn't like things like:
Code:
newPtr->nextPtr=*topPtr;
which also Deitel uses... Could anybody please explain me this?
Thanks a lot! bye