int stack in c
This commit is contained in:
parent
3396cf7802
commit
90308911bf
1 changed files with 70 additions and 0 deletions
70
stack.c
Normal file
70
stack.c
Normal file
|
@ -0,0 +1,70 @@
|
|||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef int bool;
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
struct stack {
|
||||
int top;
|
||||
int *data;
|
||||
int size;
|
||||
|
||||
};
|
||||
|
||||
void stack_push(struct stack *s, int e);
|
||||
int stack_pop(struct stack *s);
|
||||
bool stack_empty(struct stack *s);
|
||||
bool stack_full(struct stack *s);
|
||||
void stack_clear(struct stack *s);
|
||||
void stack_free(struct stack* s);
|
||||
|
||||
struct stack* stack_create(int size) {
|
||||
struct stack* s = (struct stack*)malloc(sizeof(struct stack));
|
||||
s->top = -1;
|
||||
s->data = (int*)malloc(sizeof(int)*size);
|
||||
s->size = size;
|
||||
return s;
|
||||
}
|
||||
|
||||
void stack_push(struct stack *s, int e) {
|
||||
assert(!stack_full(s));
|
||||
s->data[++s->top] = e;
|
||||
}
|
||||
|
||||
int stack_pop(struct stack *s) {
|
||||
assert(!stack_empty(s));
|
||||
return s->data[s->top--];
|
||||
}
|
||||
|
||||
bool stack_empty(struct stack *s) {
|
||||
return (s->top == -1);
|
||||
}
|
||||
|
||||
bool stack_full(struct stack *s) {
|
||||
return (s->top == s->size - 1);
|
||||
}
|
||||
|
||||
void stack_clear(struct stack *s) {
|
||||
s->top = -1;
|
||||
}
|
||||
|
||||
void stack_free(struct stack* s) {
|
||||
free(s->data);
|
||||
free(s);
|
||||
}
|
||||
|
||||
int main( int argc, char *argv[] ) {
|
||||
struct stack* s = stack_create(10);
|
||||
|
||||
for(int i = 0; !stack_full(s); i++) {
|
||||
stack_push(s, i);
|
||||
}
|
||||
|
||||
while(!stack_empty(s)) {
|
||||
printf("%d\n",stack_pop(s));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue