带有 ADT 的 C 堆栈 - 抽象数据类型
C stack with ADT - Abstract data type
如果我有必须使用的堆栈抽象类型:
stack.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
stack.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
如果我有必须使用的堆栈抽象类型:
stack.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
stack.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