带 ADT 的 C 堆栈 - 抽象数据类型

标签 c types stack abstract

如果我有这个堆栈抽象类型,我必须使用:

堆栈.h:

#ifndef STACK_H
#define STACK_H

typedef enum { STACK_OK, STACK_EMPTY, STACK_FULL } StackStatut;

void pushToStack(void * x);
void * popFromStack(void);
unsigned countStack(void);

#endif

堆栈.c:

#include "stack.h"
#define MAX_ELEMS 200
static unsigned numbElems = 0;
static void * elems[MAX_ELEMS];

void pushToStack(void * x) {
    elems[numbElems++] = x;
}

void * popFromStack(void) {
    return elems[--numbElems];
}

unsigned countStack(void){
    return numbElems;
}

当我进入 main.c 时,我知道我必须包含 stack.h 以便能够声明一个指针来构建堆栈。

关键是我不知道如何继续。我知道当 ADT 涉及到结构时如何处理它,但现在我完全迷失了。

如果我可以说: main.c:

 #include "stack.h"
    int main() {
       int i = 1;
       int j = 2;
       int k ; 3;

       // At this point, i know that i need a void * prt
       int * prt;

       // This is the part where i dont know how to start my stack.
       // if i do :
       pushToStack(&i);

       // i dont know how the number of elem in the stack will be incremented
       // I dont know neither how to apply a statut to the stack.

    }

非常感谢!

最佳答案

堆栈在stack.c中初始化

static unsigned numbElems = 0;
static void * elems[MAX_ELEMS];

这两行创建堆栈并将当前计数设置为 0

关于带 ADT 的 C 堆栈 - 抽象数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573658/

相关文章:

delphi - 在 Delphi 中,跨单元使用类型定义时出现问题

java - 具有多个子项的树的数组中的通用类型

c - 如何从包含整数和字符串的文本文件中使用 fscanf 和 fgets?

c++ - 在声明和初始化指针后,什么时候给变量字面量加上星号前缀,什么时候不用?

c - 需要左值作为赋值的左操作数

C - 'file' 错误的冲突类型

c - 在 C 中引发堆栈下溢

c - 我的代码有什么问题吗?

c++ - 即使在执行流程到达包含 while 的函数结束后,while 循环也会无限执行而无需任何递归调用

c - Pthreads:主线程和子线程栈大小的关系