/* 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表
表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又
称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈
顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶
的数据元素,附设一个指针指示栈顶的元素在栈中的位置....... */
#ifndef STACK_H
#define STACK_H
#define INFINITY 65535 //β值表示无穷大
#define MAXSIZE 1000 //栈的最大空间
typedef int ElemType; //栈的数据类型
typedef struct{
ElemType data[MAXSIZE]; //栈的大小
int top; //栈顶的游标
}Stack;
void InitStack(Stack *s); //初始化栈
bool IsEmpty(Stack *s); //判断栈是否为空
ElemType Top(Stack *s); //返回栈顶的元素
ElemType Pop(Stack *s); //返回并删除栈顶的元素
void Push(Stack *s,ElemType e); //将元素e压栈
void Print(Stack *s); //输出从栈底到栈顶的元素
void Clear(Stack *s); //清空栈元素
#endif //STACK_H
#include "Stack.h"
#include <stdio.h>
void InitStack(Stack *s) //初始化栈
{
s->top = -1;
}
bool IsEmpty(Stack *s) //判断栈是否为空
{
if(s->top == -1)
return true;
return false;
}
ElemType Top(Stack *s) //返回栈顶的元素
{
if(!IsEmpty(s))
return s->data[s->top];
return INFINITY;
}
ElemType Pop(Stack *s) //返回并删除栈顶的元素
{
if(!IsEmpty(s))
return s->data[s->top--];
return INFINITY;
}
void Push(Stack *s,ElemType e) //将元素压栈
{
if(s->top >= MAXSIZE - 1)
return;
s->top++;
s->data[s->top] = e;
}
void Clear(Stack *s) //清空栈
{
s->top = -1;
}
void Print(Stack *s) //打印栈底到栈顶的元素
{
for(int i = 0;i <= s->top;++i)
printf("%d ",s->data[i]);
printf("\n");
}
#include "Stack.h"
#include <stdio.h>
int main()
{
Stack s;
InitStack(&s);
for(int i = 1;i < 20;i += 2)
Push(&s,i);
Print(&s);
printf("栈顶的元素为:\n");
int k = Top(&s);
printf("%d\n",k);
Clear(&s);
if(IsEmpty(&s))
printf("栈为空\n");
else
printf("栈不为空\n");
return 0;
}