Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to implement stack with only pointer to structure (no data type)?

Tags:

c

stack

pointers

Suppose I have the following structure

typedef struct _Stack {
   struct _Stack *next;
} Stack;

Note in above there is no data type for storage, only *next pointer to structure. So, my question is will it be possible that the following function is valid.

void stackPush(Stack **stackP, void *dataP) {
    Stack *data = (Stack*)dataP;

    data->next = *stackP;
    *stackP = data;
}

I saw this function in glib library in the file gtrashstack.c. But when I compiled above, I got a warning : In data->next : assignment from incompatible pointer type.

I know that, I can rewrite the structure with generic pointer. But I only want to know, why the above will not work?

Update: My mistake, here I write typedef struct _Stack but in my program, I missed _Stack.

like image 708
Ashish Rawat Avatar asked Jan 22 '26 05:01

Ashish Rawat


2 Answers

This function is valid. Probably it is used for different structures like:

 typedef struct my_Stack {
   struct my_Stack *next;
   sometype1 somename1;
   ...
   sometypen somenamen;
 } MyStack;

i.e. for the lists where the pointer to the next elem is placed as the first field of the structure. It is the same trick as when classes are built via simple inheritance in C++. For such a structure you can call:

x = malloc(sizeof(struct my_Stack));
x->somename1 = aaa; ...
stackPush(&mylist, x);

I am not sure if this style of programming is supported by the C standard. It's not a good style for novices. It is for developers who know what they are doing in C.

like image 170
Marian Avatar answered Jan 23 '26 19:01

Marian


The answer is yes, it is possible to implement stack with only pointer to structure (no data type). See implementation of generic list or queue in c in Linux (don't know if it is implemented in windows also). See how it is implemented Linux Kernel Linked List Explained

like image 24
Dabo Avatar answered Jan 23 '26 21:01

Dabo