2015-04-11 3 views
0

Если у меня есть этот стек абстрактный тип, который я использовать:стек C с ADT - Абстрактный тип данных

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. 

    } 

Спасибо вам большое!

+0

И я не могу изменить файлы заголовков и исходные. Мы не можем этого сделать. – Thapipo

+1

Вам ничего не нужно начинать. Вам просто нужно вызвать pushToStack() и popFromStack() и countStack(). Все должно быть инициализировано –

+0

Большое спасибо! Он работает очень хорошо, но я до сих пор не совсем понимаю, как работает программа, как я получаю 0 - вызов countStack, где он берет это число! Но большое спасибо! – Thapipo

ответ

0

Стек происходит инициализация в stack.c

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

Эти две строки создают свой стек и установить текущее значение счетчика на 0

Смежные вопросы