所以现在几天我就如何制作一个包含结构的堆栈而自杀。一开始我认为这很容易但事实证明它不是(对我来说)。
所以问题是这样的:用户给出了堆栈的大小,然后我必须初始化堆栈,然后进行推送,弹出和显示。我现在关心的是如何初始化它。我知道我必须用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”或“stud”?))malloc(size * sizeof(struct(“prof”或“stud”?)
我如何知道堆栈的类型?
谢谢Chnossos !!你真的帮了我:)。
答案 0 :(得分:1)
只需做那样的事......
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
变量时,才会有效。
答案 1 :(得分:-3)
您可以通过包含堆栈标题
来简单地使用模板堆栈对象#include<iostream>
#include<stack>
using namespace std;
struct stud
{
char flag;
char fname[50];
int semester;
}d;
int main()
{
stack<stud> s;
stud d;
d.flag='a';
strcpy(d.fname,"saurah");
d.semester=4;
s.push(d);
stud f=s.top();
s.pop();
cout<<f.fname;
return 0;
}