gpt4 book ai didi

c - 如何制作包含结构的堆栈?

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:45 25 4
gpt4 key购买 nike

所以这几天我一直在研究如何制作包含结构的堆栈。一开始我认为这很容易,但事实证明并非如此(对我而言)。

所以问题是这样的:用户给出堆栈的大小,然后我必须初始化堆栈,然后进行推送、弹出和显示。我现在关心的是如何初始化它。我知道我必须用 malloc 来做,但我不知道怎么做。

注意:应该在堆栈中的结构是“stud”和“prof”。

这是我制作的堆栈:

struct MyStack
{
int head;
void **stack;
int size;
};
typedef struct MyStack STACK;
struct stud
{
char flag;
char fname[50];
int semester;
};
struct prof
{
char flag;
char fname[50];
char course[30];
};
int main()
{
int size,sel;
size=GiveSize();
STACK NewStack;
NewStack.size = size;
}

现在呢?是吗:

NewStack.stack = (struct *("prof"or "stud"?)) malloc(size*sizeof(struct ("prof"or "stud"?)

我怎么知道堆栈是什么类型?

感谢 Chnossos!你真的帮了我:)

最佳答案

简单地做类似的事情......

void print_stack (STACK * stack)
{
struct stud * s;
s = stack->stack[0];
printf("Student (%c) %s is in semester %d.\n", s->flag, s->fname, s->semester);
}

int main()
{
struct stud student = { 's', "toto", 1 };
int size, sel;

size = GetSize();
STACK NewStack;

NewStack.size = size;
NewStack.stack = malloc((size + 1) * sizeof(void *));
NewStack.stack[size] = NULL;

NewStack.stack[0] = &student;

print_stack(&NewStack);

return 0;
}

... 成功打印 Student (s) toto is in semester 1.


打印整个堆栈:

#define STUDENT_FLAG    's'
#define PROF_FLAG 'p'

void print_student (struct stud *s)
{
printf("Student (%c) %s is in semester %d.\n", s->flag, s->fname, s->semester);
}

void print_prof (struct prof *p)
{
printf("Prof (%c) %s is in course %d.\n", p->flag, p->fname, p->course);
}

void print_full_stack (STACK * stack)
{
char flag;
int i;

for (i = 0 ; i < stack->size ; ++i)
{
flag = *(char *)(stack->stack[i]);
if (flag == STUDENT_FLAG)
print_student(stack->stack[i]);
else if (flag == PROF_FLAG)
print_prof(stack->stack[i]);
}
}

请注意,只有在堆栈中存储的每个结构中首先声明了 flag 变量时,这才会起作用。

关于c - 如何制作包含结构的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698166/

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