gpt4 book ai didi

c - 包含指向其他结构的指针的堆栈

转载 作者:行者123 更新时间:2023-11-30 17:36:09 25 4
gpt4 key购买 nike

我尝试创建一个包含指向其他类型结构(Prof 或 Stud)的指针(即地址)的堆栈。但我似乎无法管理它。错误是无限的。代码如下:

     struct MyStack
{
int head;
void **stack;
int size;
};

struct stud
{
char flag;
char fname[50];
int semester;
};
struct prof
{
char flag;
char fname[50];
char course[30];
};
int InitStack(int size,struct MyStack *stack);

int InitStack(int size,struct MyStack *stack)
{
stack->size = size;
*stack->stack=(int *) malloc(size*sizeof(int) ); //Is this RIGHT?
stack->head=-1;
return 0;
}
int main()
{
int size,sel;

size = GiveSize();
struct MyStack NewStack;
InitStack(size,&NewStack);

do{
sel=Menu();
Select(sel,NewStack.head,&NewStack);
}while (sel!=0);



return 0;
}

如何将指针(指向螺柱和教授)插入堆栈?

代码如下:

int CreateStud(struct MyStack *stack,char *name,int sem,int *head,int n)
{
struct stud newStud;
int thead=*head;

newStud.flag='s';
strcpy(newStud.fname,name);
newStud.semester=sem;
Push(stack,&thead,&newStud,n);
*head=thead;

return 0;
}
int Push(struct MyStack *stack,int *head, void *elem,int n)
{
if(*head>=n-1)
return 0;
stack->stack[++*head]=elem;

return 1;
}

最佳答案

你的InitStack函数应该是

int InitStack(int size,struct MyStack *stack)
{
stack->size = size;
stack->stack= malloc(size * sizeof(void*));
stack->head=-1;
return 0;
}

推送功能应该类似于

int Push(struct MyStack *stack, void *str)
{
/* Check if stack is full */
stack->head++;
stack->stack[stack->head] = str;
return 0;
}

您可以将其用作

struct stud s1;
struct prof p1;

Push(&NewStack, &s1);
Push(&NewStack, &p1);

关于c - 包含指向其他结构的指针的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com