动态顺序栈 C语言

数据结构C语言动态顺序栈的实现和表达

动态顺序表相比于静态顺序表只是在定义上多个需要用malloc申请空间,并且释放;在结构上比静态增加了能增加最大容纳长度的函数。

#include <stdio.h>
#include <stdlib.h>  
#define Initsize 10 //静态顺序栈存储的最大空间 
#define OVERFLOW 1 //定义栈的溢出 

typedef struct 
{
	int *base;//栈低指针 
	int *top;//栈顶指针 
	int MaxSize;//栈当前最大容量 
}SqStack;

void InitStack(SqStack &S)//栈的初始化 
{
	S.base = (int*)malloc(sizeof(int)*Initsize);//申请一篇连续地址的空间 ,并使该空间的首地址返回给S.base 
	S.MaxSize = Initsize;//栈的最大容量赋值 
	if(S.base == NULL)//判断有没有申请到 
		exit(OVERFLOW);
	S.top = S.base; //栈的初始化,栈低和栈顶指向的统一位置 
}

int Push(SqStack &S,int e)//进栈 
{
	if(S.top-S.base==S.MaxSize)//判断栈是否为满 
	{
		printf("栈满!\n");
		return 0;
	}
	*S.top++ = e;//压入栈的值 
	return 0; 
}

int Length(SqStack S)//栈长 
{
	return S.top-S.base;
}

int Pop(SqStack &S)//使栈顶元素出栈,并返回栈顶元素,且栈长减一 
{
	if(Length(S))
	{
		printf("空栈!\n");
		return 0; 
	} 
	S.top--;//栈顶减一 
	return *S.top;//输出栈顶元素 
}

void IncreaseSize(SqStack &S,int len)//动态增加栈长 
{
	int a = Length(S),//定义一个变量a等于栈长 
		i;//循环变量 
	printf("%d  ",Length(S)); 
	int *p;
	p = S.base;//定义一个指针p指向栈低首元素 
	S.base = (int*)malloc(sizeof(int)*(Initsize+len));//对栈重新申请一个更大的连续空间 
	S.MaxSize = Initsize + len;//使栈的最大容量变大 
	S.top = S.base;
	for(i=0;i<a;i++)//利用循环,使老的栈区数据依次写入新的栈区中 
		*S.top++ = p[i];	
	printf("%d  ",Length(S)); 
	free(p);//最后把老的栈给释放了 
}

int main()
{
	SqStack S;
	InitStack(S);//初始化栈 
	int i;
	for(i=1;i<110;i=i+10)//利用循环使数据以此进入栈中 
		Push(S,i);//进栈 
	printf("当前栈长:%d\n",Length(S));//栈长 
	printf("栈顶元素:%d\n",Pop(S));
	printf("将栈顶元素导出后栈长:%d\n",Length(S));
	IncreaseSize(S,1);//增加栈长  
	free(S.base);
	return 0;
}

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值