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

时间:2014-03-27 20:08:55

标签: c struct stack

所以现在几天我就如何制作一个包含结构的堆栈而自杀。一开始我认为这很容易但事实证明它不是(对我来说)。

所以问题是这样的:用户给出了堆栈的大小,然后我必须初始化堆栈,然后进行推送,弹出和显示。我现在关心的是如何初始化它。我知道我必须用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 !!你真的帮了我:)。

2 个答案:

答案 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;
    }