数据结构之栈的实现

数据结构之栈的实现

前言:
对于栈我们只需要明白以下几点即可:
1、栈是一个线性表
2、栈只能在表尾(成为栈顶)进行删除和插入(表头称为栈底)
3、栈的特征是后进先出
4、栈的实现也有顺序存储结构和链式存储结构之分
5、顺序栈的实现要注意,栈顶指针始终在栈顶元素的下一个位置

一、栈的顺序存储结构的基本操作实现代码如下:

// 栈.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#include "stdlib.h"

#define stack_init_size 100
#define stackincrement 10

typedef int SElemType;

typedef struct StackName
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

/*栈的初始化*/
bool initStack(SqStack *S)
{
	//构造一个空栈
	S->base=(SElemType*)malloc(stack_init_size*sizeof(SElemType));
	if (!S->base)
	{
		return false;
	}
	S->top=S->base;

	S->stacksize=stack_init_size;
	printf("栈初始化完成!\n");
	return true;
}

/*入栈*/
bool Push(SqStack *S,SElemType e)
{
	printf("%d 入栈完成!\n",e);
	if (S->top-S->base>=S->stacksize)//栈满
	{
		S->base=(SElemType*)realloc(S->base,(S->stacksize+stackincrement)*sizeof(SElemType));
		if (!S->base)
		{
			return false;
		}
	}
	*S->top++=e;
	return true;
}
/*出栈*/
bool Pop(SqStack *S,SElemType *e)
{
	if (S->top==S->base)//栈空
	{
		return false;
	}
	e=--S->top;
	printf("%d 元素出栈\n",*e);
	return true;
}

/*获得栈顶元素*/
void getTop(SqStack S,SElemType *e)
{
	if (S.base!=S.top)
	{
		*e=*(S.top-1);
	}
}

/*打印顺序栈*/
void printfStack(SqStack S)
{
	printf("打印顺序栈如下:\n");
	while (S.base!=S.top)
	{
		printf("%d ",*--S.top);
	}
	printf("\n");
};

int _tmain(int argc, _TCHAR* argv[])
{
	SqStack *S=(SqStack *)malloc(sizeof(SqStack));
	initStack(S);
	Push(S,6);
	Push(S,8);
	Push(S,10);
	printfStack(*S);
	SElemType *e=(SElemType*)malloc(sizeof(SElemType));
	Pop(S,e);
	printfStack(*S);
	getTop(*S,e);
	printf("栈顶元素为%d\n",*e);
	system("pause");
	return 0;
}

在这里插入图片描述
通过以上基本操作代码的运行结果,也能够清楚的看出,栈的后进先出的特点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mekeater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值