顺序栈的实现

 
/*	栈是一种限定只在表尾进行插入或删除操作,栈也是线性表
	表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又
	称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈
	顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶
	的数据元素,附设一个指针指示栈顶的元素在栈中的位置....... */
#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;
}


 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值