算法导论------------栈(stack)简单的数组实现

栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行实现。在标准模块库STL中有具体的应用,可以参考http://www.cplusplus.com/reference/

栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的。

队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。

         

栈的简单数组实现:

#include<iostream>

using namespace std;

struct stack
{
	int *s;
	int stackSize;
	int top;
};

//init stack
void init_stack(stack *s)
{
	s->stackSize = 100;
	s->s = (int*)malloc(sizeof(int)*s->stackSize);
	//s->s = new int();
	s->top = -1;
}

int stack_empty(stack s)
{
     return ((0 == s.stackSize) ? 1 : 0);
}

void push_stack(stack *s, int x)
{
	if (s->top == s->stackSize)
		cout << "up to overflow" << endl;
	else
	{
		s->top++;
		s->s[s->top] = x;
		s->stackSize++;
	}

}

void pop_stack(stack *s)
{
	if (0 == s->stackSize)
		cout << "down to overflow" << endl;
	else
	{
		s->top--;
		s->stackSize--;
	}
}

int top_stack(stack s)
{
	return s.s[s.top];
}


int main()
{
	stack s;
	init_stack(&s);

	for (int i = 0; i < 88; i++)
	{
		push_stack(&s, i);
	}

	for (int i = 0; i < 5; i++)
	{
		cout<<top_stack(s)<<" ";
		pop_stack(&s);
	}
	
}

队列的简单实现下次写。学习了一晚上,很累很累了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值