数据结构基础之栈

栈:遵行先进后出    

对栈的数据结构的定义保存在SeqStack.h中,代码如下:

#define StackSize 100
typedef struct
{//线性
	DataType stack[StackSize];
	int top;
}SeqStack;

void InitStack(SeqStack *s)
{//初始化栈
	s->top=0;
}
int StackEmpty(SeqStack s)
{//判断栈是否为空,为空返回1,否则返回0
	if(s.top==0)
		return 1;
	else
		return 0;
}

int GetTop(SeqStack s,DataType *e)
{//取栈顶元素,将栈顶元素返回给e,1成功,0失败
	if(s.top<=0)
	{
		printf("栈已空!\n");
		return 0;
	}
	else
	{
		*e=s.stack[s.top-1];
		return 1;
	}
}

int PushStack(SeqStack *s,DataType e)
{//将元素e压栈,成功返回1,否则为0
	if(s->top>=StackSize)
	{
		printf("栈已满!\n");
		return 0;
	}
	else
	{
		s->stack[s->top]=e;  //元素e进栈
		s->top++;
		return 1;
	}
}

int PopStack(SeqStack *s,DataType *e)
{//出栈
	if(s->top==0)
	{
		printf("站中无元素\n");
		return 0;
	}
	else
	{
		s->top--;
	*e=s->stack[s->top];  //元素e出栈
	return 1;
	}
}

int StackLength(SeqStack s)
{//求栈的长度
	return s.top;
}

void ClearStack(SeqStack *s)
{
	s->top==0;
}
利用顺序栈,将元素A,B,C,D,E,F依次进栈,然后将F和E出栈,再将G和H进栈,最后全部元素出栈,代码如下:

#include"stdio.h"
#include"stdlib.h"
typedef char DataType;
#include"SeqStack.h"
void main()
{
	SeqStack s;
	int i;
	DataType a[]={'A','B','C','D','E','F'};
	DataType e;
	InitStack(&s);
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
	{
		if(PushStack(&s,a[i])==0)
		{
			printf("栈已满");
			return;
		}
	}
	printf("出栈依次元素是:");
	if(PopStack(&s,&e)==1)
		printf("%4c",e);  //F出栈
	if(PopStack(&s,&e)==1)
		printf("%4c",e);  //E出栈
	printf("\n");
	printf("当前的栈顶元素是:");
	if(GetTop(s,&e)==0)
	{
		printf("栈已空");
		return;
	}
	else
		printf("%4c\n",e);
	printf("将元素G、H依次进栈\n");//G进栈
	if(PushStack(&s,'G')==0)
	{
		printf("栈已满");
		return;
	}
	if(PushStack(&s,'H')==0)//H进栈
	{
		printf("栈已满");
		return;
	}
	printf("当前栈中的元素个数是:%d\n",StackLength(s));
	printf("元素出栈\n");
	while(!StackEmpty(s))
	{
		PopStack(&s,&e);
		printf("%4c",e);
	}
	printf("\n");
}
参考:《数据结构》——陈锐

                                                                                                                                                                                                                              

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值