栈:实现一种先进后出的数据结构
数组实现栈的几个要素:
1.数据:存放数据的数组
2. 栈顶 :指向栈的最上面一个元素的上面一个位置
3. 栈底:指向栈的第一个元素的位置
stack.h
#ifndef __STACK_H_
#define __STACK_H_
#define bool_t int
#define length 100
typedef float DataType ;
typedef struct Stack
{
DataType data[length];
int base;
int top;
}stack;
stack* createStack();
void Destroy(stack* st);
bool_t StackIsEmpty(stack* st);
int push(stack* st , DataType data);
int pop(stack *st);
DataType GetTop(stack* st);
void showData(stack* st);
void showData_char(stack* st);
void showData_float(stack* st);
#endif
stack.c
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#include<string.h>
stack* createStack()
{
stack *st = (stack*)malloc(sizeof(stack));
if(NULL == st)
{
return NULL;
}
st->base = st->top = 0;
memset(st->data, 0x0, sizeof(DataType)*length);
return st;
}
void Destroy(stack* st)
{
if(NULL != st)
{
free(st);
}
}
bool_t StackIsEmpty(stack* st)
{
if(st->top == st->base || st->top == 0)
{
return 1;
}
return 0;
}
int push(stack* st , DataType data)
{
if(st->top +1 > length)
{
printf("Stack is Full!!!\n");
return -1;
}
st->data[st->top++] = data;
return 0;
}
int pop(stack *st)
{
if( st->top <= 0)
{
return -1;
}
--st->top;
return 0;
}
void showData(stack* st)
{
int i = st->base;
for(; i < st->top; ++i)
{
printf("%d ", st->data[i]);
}
printf("\n");
}
void showData_char(stack* st)
{
int i = st->base;
for(; i < st->top; ++i)
{
printf("%c ", st->data[i]);
}
printf("\n");
}
void showData_float(stack* st)
{
int i = st->base;
for(; i < st->top; ++i)
{
printf("%f ", st->data[i]);
}
printf("\n");
}
test.c
#include<stdio.h>
#include"stack.h"
#if 1
int main()
{
stack* st = NULL;
int size = 20;
int i = 0,j = 0;
int ret = 0;
float val = 1.0;
st = createStack();
for(i = 0; i < size; ++i)
{
push(st, (val + (float)(i)));
}
showData_float(st);
for(i = 0; i < size+3; ++i)
{
ret = pop(st);
if(0 != ret)
{
printf("Invalid data pop!!!\n");
}
}
showData_float(st);
if(StackIsEmpty(st) )
{
printf("Stack is Empty!!!!\n");
}
size = length+2;
for(i = 0; i < size; ++i)
{
push(st, (val + (float)(i)));
}
showData_float(st);
return 0;
}
#endif
#if 0
int main()
{
stack* st = NULL;
int i = 0, j = 0,size = 10;
st = createStack();
for(i = 0; i < size; ++i)
{
push(st, 'a'+i);
}
showData_char(st);
while(!StackIsEmpty(st))
{
pop(st);
}
showData_char(st);
size = 103;
for(i = 0; i < size; ++i)
{
push(st, 'a'+i);
}
showData_char(st);
return 0;
}
#endif