栈的实现(一)顺序栈

Stack基本概念

栈是一种  特殊的线性表

栈仅能在线性表的一端进行操作

栈顶(Top):允许操作的一端

栈底(Bottom):不允许操作的一端


Stack的常用操作

创建栈

销毁栈

清空栈

进栈

出栈

获取栈顶元素

获取栈的大小

栈的顺序存储设计与实现

1、基本概念

栈的顺序存储结构与线性表的顺序存储结构类似,内部都是用数组实现的。

2、设计与实现

定义文件:

#ifndef _MY_SEQSTACK_H_
#define _MY_SEQSTACK_H_

typedef void SeqStack;

SeqStack* SeqStack_Create(int capacity);

void SeqStack_Destroy(SeqStack* stack);

void SeqStack_Clear(SeqStack* stack);

int SeqStack_Push(SeqStack* stack, void* item);

void* SeqStack_Pop(SeqStack* stack);

void* SeqStack_Top(SeqStack* stack);

int SeqStack_Size(SeqStack* stack);

int SeqStack_Capacity(SeqStack* stack);

#endif //_MY_SEQSTACK_H_


栈的实现是借助线性表的顺序存储结构模拟的,因此通过调用线性表的顺序存储结构的API封装成栈的顺序存储结构的操作函数

如果对 线性表的顺序存储结构的API不熟,可参看线性表的顺序存储结构API实现

顺序存储结构stack的实现:

#include "seqstack.h"
#include "seqlist.h"  //线性表的顺序存储头文件


SeqStack* SeqStack_Create(int capacity)
{
	return SeqList_Create(capacity);
}

void SeqStack_Destroy(SeqStack* stack)
{
	 SeqList_Destroy(stack);
}

void SeqStack_Clear(SeqStack* stack)
{
	 SeqList_Clear(stack);
}

//往栈中放元素,相当于向线性表中放元素
int SeqStack_Push(SeqStack* stack, void* item)
{
	return SeqList_Insert(stack, item, SeqList_Length(stack));
}

//从栈中弹出元素,相当于从线性表中删除元素
void* SeqStack_Pop(SeqStack* stack)
{
	return SeqList_Delete(stack, SeqList_Length(stack) -1);
}

void* SeqStack_Top(SeqStack* stack)
{
	return SeqList_Get(stack, SeqList_Length(stack)-1);;
}

int SeqStack_Size(SeqStack* stack)
{
	return SeqList_Length(stack);
}

int SeqStack_Capacity(SeqStack* stack)
{
	return SeqList_Capacity(stack);
}

 测试文件:

void main()
{

	int a[20], i = 0;
	int *pTmp = NULL;
	SeqStack* stack = NULL;

	stack = SeqStack_Create(20);

	for (i=0; i<10; i++)
	{
		a[i] = i+1;
		//SeqStack_Push(stack, &a[i]);
		SeqStack_Push(stack, a+i);
	}


	pTmp = (int *)SeqStack_Top(stack);
	printf("top:%d \n", *pTmp);

	printf("capacity:%d \n", SeqStack_Capacity(stack));

	printf("size:%d \n", SeqStack_Size(stack));

	//元素出栈
	while (SeqStack_Size(stack) > 0)
	{
		printf("pop:%d \n", *((int *)SeqStack_Pop(stack)) );
	}

	SeqStack_Destroy(stack);

	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值