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

标签 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"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/

相关文章:

java - 使用堆栈检查分隔符

c - Malloc 是否分配了比需要的更多的内存?

检查 IF ELSE 语句是否有效

c - 从内核模块中的 AF_UNIX 套接字的 fd 获取绝对路径

stack - 术语 "web stack?"是什么意思

java - jsoup:向后遍历 Element 类型的对象

c++ - 为什么我的 8M L3 缓存对大于 1M 的阵列没有任何好处?

c - C 中的 malloc 函数

pointers - Golang 在另一个结构的方法中更改一个结构的值

c - 具有带符号整数位字段的结构产生负输出