所以这几天我一直在研究如何制作包含结构的堆栈。一开始我认为这很容易,但事实证明并非如此(对我而言)。
所以问题是这样的:用户给出堆栈的大小,然后我必须初始化堆栈,然后进行推送、弹出和显示。我现在关心的是如何初始化它。我知道我必须用 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/