数据结构与算法(4)栈的基本操作

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MaxSize 10
typedef int ElemType;

//顺序栈的定义
typedef struct 
{
	ElemType data[MaxSize];//定义一个静态数组存放栈的元素
	int top;//栈顶指针
	int length;
}SqStack;
SqStack S;
void InitStack(SqStack* s);//栈的初始化
bool PushStack(SqStack* s, ElemType e);//进栈操作
bool PopStack(SqStack* s, ElemType e);//出栈操作
bool GetTopStack(SqStack* s, ElemType* e);//取栈顶元素
bool PrintStack(SqStack* s);//打印栈的元素


void InitStack(SqStack* s)//栈的初始化
{
	s->top = -1;//注意:这里的栈顶指针一开始是指向-1的,所以在插入元素之后top指针指向栈顶元素
	//若初始化是0,则栈顶指针指向栈顶元素的下一个位置
	printf("栈初始化成功\n");
}

bool PushStack(SqStack* s, ElemType e)//进栈操作
{
	if (s->top == MaxSize - 1)
		printf("该栈已满,无法插入元素\n");
	s->data[++s->top] = e;
	//s->top=s->top+1;
	//s->data[s->top] = e;
	printf("进栈成功\n");
	s->length++;
}

bool PopStack(SqStack* s, ElemType e)//出栈操作
{
	if (s->top == -1)
	{
		printf("该栈为空,无法完成出栈操作\n");
	}
	s->data[s->top--];
	//e=s->data[s->top];
	//s->top=s->top-1;
	printf("出栈成功\n");
}

bool GetTopStack(SqStack* s, ElemType* e)//取栈顶元素
{
	if (s->top == -1)
	{
		printf("该栈为空,无法完成出栈操作\n");
	}
	e = s->data[s->top];
	printf("该栈栈顶元素为%d", e);
}

bool PrintStack(SqStack s)
{
	for (int i= 0; i< s.length; i++)
	{
		printf("%d ", s.data[i]);
	}
}

栈的特点:

1.只能从一端(栈顶)进行插入和删除元素的线性表(后进先出)

2.注意出栈顺序的考题

3.若初始化指针top指向-1或0时,这会导致在后续的进栈和出栈操作也会有所不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值