01
程序文件
I、
在顺序栈/stack目录下分别创建main.c、Stack.c文件
// main.c
#include <stdio.h>
#include "Stack.h"
int main()
{
// 定义变量
Stack s;
// 初始化栈
Init(&s);
// 入栈
int i;
for (i = 0; i < 10; i++)
{
Push(&s, i);
}
while(!Empty(&s))
{
// Data data = GetTop(&s);
Data data;
GetTop(&s, &data);
printf ("%-4d", data);
Pop(&s);
}
printf ("\n出栈成功^=^!\n");
return 0;
}
// stack.c
#include <stdio.h>
#include <stdlib.h>
#include "Stack.h"
// 初始化栈
void Init(Stack *s)
{
if (NULL == s)
{
return;
}
s->top = -1;
// 如果没有提前返回的要求,那么代码执行到最后,有没有return ;都是无所谓的。
return;
}
// 判断空栈
BOOL Empty(Stack *s)
{
if (NULL == s)
{
return FALSE;
}
// 空栈返回TRUE == 0
if (-1 == s->top)
{
return TRUE;
}
return FALSE;
}
// 判断满栈
BOOL Full(Stack *s)
{
if (NULL == s)
{
return FALSE;
}
if (SIZE-1 == s->top)
{
return TRUE;
}
return FALSE;
}
// 入栈
void Push(Stack *s, Data data)
{
if (NULL == s)
{
return;
}
if (Full(s) == TRUE)
{
return;
}
s->data[++s->top] = data;
}
// 出栈
void Pop(Stack *s)
{
if (NULL == s)
{
return;
}
if (TRUE == Empty(s))
{
return;
}
s->top--;
}
// 获取栈顶元素
Data GetTop(Stack *s, Data *data)
{
if (NULL == s)
{
return 0;
}
if (TRUE == Empty(s))
{
exit(-1);
}
*data = s->data[s->top];
// return s->data[s->top];
}
II、
在顺序栈/include目录下创建Stack.h文件
#ifndef _STACK_H_
#define _STACK_H_
#define SIZE 10
typedef int Data;
//0为假 非0为真
typedef enum {FALSE, TRUE} BOOL;
typedef struct stack
{
//栈存储空间
Data data[SIZE];
//栈顶元素的下标
int top;
}Stack;
//初始化栈
void Init(Stack *s);
//判断空栈
BOOL Empty(Stack *s);
//判断满栈
BOOL Full(Stack *s);
//入栈
void Push(Stack *s, Data data);
//出栈
void Pop(Stack *s);
//获取栈顶元素
Data GetTop(Stack *s, Data *data);
#endif //_STACK_H
III、
在顺序栈目录下创建Makefile文件
src1 = $(wildcard ./src/*.c)
obj1 = $(patsubst ./src/%.c, ./obj/%.o, $(src1))
target = ./bin/a.out
all:$(target)
$(target):$(obj1)
gcc $(^) -o $(@)
$(obj1):./obj/%.o:./src/%.c
gcc -c $(^) -I ./include -o $(@) -g
.PHONY:clean all
clean:
-rm -rf $(target) $(obj1)
02
测试结果
root@lj:/顺序栈# make
gcc -c src/main.c -I ./include -o obj/main.o -g
gcc obj/main.o obj/Stack.o -o bin/a.out
root@lj:/顺序栈# ./bin/a.out
9 8 7 6 5 4 3 2 1 0
出栈成功^=^!