数据结构之动态栈、静态栈详解

本文详细介绍了数据结构中的栈,包括定义、内存生成方式的区分,重点讲解了静态栈和动态栈的概念及操作。静态栈的实现不使用malloc函数,内存由主函数分配,而动态栈则利用头插法和头指针进行操作。
摘要由CSDN通过智能技术生成

程序都已经成功通过编译,运行无异常,如果你发现bug,请评论区留言,我们相互交流下经验。

定义:

栈是只能在一端进行数据的插入与删除的线性表。也可以理解为一种“先进后出”的存储结构。

按照内存生成的方式不同分为:

	静态栈 			动态栈

栈的几个概念:

  1. 允许进行插入、删除操作的一端称为栈顶。
  2. 表的另一端称为栈底。
  3. 当栈中没有数据元素时,称为空栈。
  4. 栈的插入操作通常称为进栈或入栈。
  5. 栈的删除操作通常称为退栈或出栈。

静态栈的代码如下:

1.静态栈 不用malloc函数

/*
	生成的内存为连续内存
	静态栈,当栈生成以后,长度已经定了 也就是一个数组,和一个栈顶元素(保存了,最后一个有效元素的位置)
	这种程序结构并不推荐
	top保存的为最后一个有效元素的地址
*/
# include <stdio.h>
# define Maxsize 10

/*
	定义一个结构体变量
	结构体变量有两部分1.是地址连续的数组内容 2.保存了最后那个元素的有效地址编号
*/

typedef struct Student
{
   
	int data[Maxsize];
	int top;  //top始终为当前元素的位置
}SqStack;

//函数申明
bool TravalList(SqStack * s);
int PopStack(SqStack * s,int &val);
bool PushStack(SqStack * s,int val);
void InitStack(SqStack * s);

int main()
{
   
	int val;
	SqStack sq; //当这条语句写下以后,栈已经生成  内存已进行分配 在主函数main中进行
				//生成一个结构体变量,操作系统并为之分配相应的内存,创建了一个数组+top的结构体,不用使用动态内存分配的malloc函数分配相应的内存
	sq.top=-1;  //设置栈顶元素为-1

	PushStack(&sq,1);  //压栈
	PushStack(&sq,2);
	PushStack(&sq,3);
	PushStack(&sq,4);
	PushStack(&sq,5);
	PushStack(&sq,6);  //压栈
	PushStack(&sq,7);
	PushStack(&sq,8);
	PushStack(&sq,9);
	PushStack(&sq,10);
	PushStack(&sq,11);
	TravalList(&sq);

	PopStack(&sq,val);
	printf("val = %d\n",val);

}

bool PushStack(SqStack * s,int val)
{
   
	if(s->top == Maxsize-1)
	{
   
		printf("栈满\n");
		return false;
	}
	else
	{
   
		s->top++;
		s->data[s->top]=val;
		return true;
	}
	
}

int PopStack(SqStack * s,int &val)//弹栈  出栈
{
   
	if(s->top == -1)
	{
   
		printf("栈空\n");
		return 0;
	}
	else
	{
   
		val = s->data[s->top];
		s->top--;
		return val;
	}
	
}

bool TravalList(SqStack * s)//遍历
{
   
	int i;
	if(s->top == -1)
	{
   
		printf("空栈\n");
		return false;
	}
	else
	{
   
		for(i=0;i<=s->top;i++)
		{
   
			printf("%d ",s->data[i])
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值