欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构之栈的实现

程序员文章站 2024-02-29 21:34:28
...

数据结构之栈的实现

前言:
对于栈我们只需要明白以下几点即可:
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;
}

数据结构之栈的实现
通过以上基本操作代码的运行结果,也能够清楚的看出,栈的后进先出的特点。