关于栈 - 原则是先进后出

关于栈,原则是先进后出,事实上用了两个迭代器,老实说我自己都不确定,我写的是不是栈

先看一下结构体的定义如下:

typedef struct{
		int *top;//指向栈的最后一个元素的下一个
		int *bottom;//指向栈的第一个进来的元素
		int size_stack;//栈的大小
	}Stack;

后面是往这个栈里面添加元素:

Stack stack;
	stack.size_stack = 0;
	stack.top = malloc(sizeof(int *));//一开始的时候指针是指向一块空的空间的,而空的空间是不允许赋值操作的,需要给他开辟一块空间来进行操作
	stack.bottom = stack.top;//让stack.bottom 指向第一个元素我的地址
	for(int i = 1;i <= 5;i++){
		*stack.top = i;
		printf("%d\n",*stack.top);
		stack.top = stack.top + 1;//使数据存储在一段连续的地址空间上面,类似于数组
		stack.size_stack++;//记录栈里面的数据量的多少
		
	}
	printf("size %d\n",stack.size_stack);
	printf("%d,%d\n",*(stack.bottom ),*(stack.top - 1));

关于栈元素的插入:

我的设想是这样的,将要插入的元素值放入stack.top指向的空间,然后使stack.top的上一个与stack.top的“值进行交换”
然后就是一直这样轮着交换,一直到指定的位置,交换结束后,使stack.top指向它的下一处的地址空间

关于栈元素的删除:

这个我还真有点迷,栈和链表是不一样的,链表是通过指针的指向来使各个节点相关联,如果要删除这个个节点其实只要让上一个节点不指向他
指向它的下一个结点就好了
但栈是地址的连续性来存放一串数据的,如果我要删除一个节点肯定不能说把中间那个地址给它挖掉,只能是通过值的交换来达到一种看似删除的效果
一般栈和队列里面的结构体都定义了这个栈或者队列的大小,所以我们在打印整个栈和队列的时候,它的范围是要依据它所给定的大小的,不能多打印了,都打印的地方那块地址空间可能是一个空值,也可能是任意的其它任何的一个值,具有很大的不确定性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值