用顺序表实现 栈的数据结构

实现思路->:

第零步,先创建一个结构体,里面有三个元素,一个元素 记载最大容量,一个元素记载当前容量,另一个元素存储有效元素(最好是指针,因为顺序表涉及扩容)。

第一步,初始化结构体,最大容量为0,当前容量为0,暂且不存储任何有效元素。

第二步,增加一个元素,增加过程中发现最大容量为0无可用空间,需要增加空间。

第三步,增加最大容量,使用 malloc 或 calloc 加 memcpy 。或 单独使用realloc 给结构体中的存储有效元素的元素开辟4个空间,之后每次空间不足 都将增加两倍大小。

第四步,空间增加成功后 添加一个元素,元素添加成功。

第五步,按照先进后出,后进先出的顺序 取出一个元素。

​
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef struct zhanshuzu //创建栈区类型
{
	int* arr;
	int max_counter = 0;
	int counter = 0;
}zhanshuzu;

void init(zhanshuzu* a)//初始化结构体
{
	a->counter = 0;
	a->max_counter = 0;
	a->arr = NULL;
}

void Expansion(zhanshuzu** p)//如果数组容量不够那就扩容 第一次扩容四个 之后每次扩容两倍
{
	((*p)->max_counter == 0) ? (*p)->max_counter = 4 : (*p)->max_counter *= 2;
	//(*p)->arr = (int*)malloc(sizeof(int)*(*p)->max_counter);
	(*p)->arr = (int*)realloc((*p)->arr, sizeof(int)*(*p)->max_counter);

}

void add(zhanshuzu* p)
{
	assert(p);
	if (p->counter == p->max_counter)//如果数组元素个数,等于数组大小 那么扩容。
	{
		Expansion(&p);
	}
	int a = 0;
	printf("进栈->:");
	scanf_s("%d", &a);

	p->arr[p->counter] = a;
	p->counter++;
}

void Out_of_the_stack(zhanshuzu* p)//出栈
{
	assert(p);
	p->counter--;
	printf("出栈->:%d\n", p->arr[p->counter]);
}

int main()
{
	zhanshuzu* a = (zhanshuzu*)malloc(sizeof(zhanshuzu));
	init(a);                 
	add(a);               
	add(a);
	add(a);
	printf("\n");
	Out_of_the_stack(a);
	Out_of_the_stack(a);
	Out_of_the_stack(a);

	return 0;
}

​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值