`
Dev|il
  • 浏览: 125231 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

顺序栈的实现

 
阅读更多
//栈的顺序表示实现

#include <stdio.h>
#include <stdlib.h>

//栈初始大小
#define STACK_INIT_SIZE 100
//栈的增长大小
#define STACKINCREMENT 10
#define OVERFLOW 0
#define ERROR 0
#define FALSE 0
#define TRUE 1

typedef int Status;
typedef int SElemType;
typedef int boolean;
//栈的顺序定义
typedef struct{
	SElemType *bese; //栈底指针,在栈构造之前和析构之后值都为NULL
	SElemType *top; //栈顶指针
	int stacksize; //栈的大小
}Stack;

//初始化栈
Stack InitStack()
{
	Stack S;
	S.bese = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
	if(!S.bese)
		exit(OVERFLOW);
	S.top = S.bese;
	S.stacksize = STACK_INIT_SIZE;
	return S;
}
//若栈不为空,则返回栈顶元素e
Status GetTop(Stack S)
{
	//判断是否为空栈
	if(S.bese == S.top)
		return ERROR;
	//非空栈的栈顶指针始终是在栈顶元素的下一个位置上
	return *(S.top - 1);
}
//入栈操作,若栈满,则增加存储空间
Stack push(Stack S, SElemType e)
{
	//判断栈是否已经满
	if(S.top - S.bese >= STACK_INIT_SIZE)
	{
		S.bese = (SElemType *)realloc(S.bese, sizeof(SElemType) * (S.stacksize + STACKINCREMENT));
		if(!S.bese)
			exit(OVERFLOW);
		S.top = S.bese + S.stacksize; //计算栈顶指针
		S.stacksize += STACKINCREMENT;
	}
	*S.top++ = e;
	return S;
}

//入栈操作
Stack pop(Stack S)
{
	//空栈
	if(S.bese == S.top)
	{
		printf("此栈是空栈!");
		return S;
	}
	S.top--;
	return S;
}
//销毁栈
Stack DestoryStack(Stack S)
{
	S.bese = NULL;
	return S;
}
//清空栈中数据
Stack ClearStack(Stack S)
{
	S.top = S.bese;
	return S;
}
//判断栈是否是空栈
boolean StackEmpty(Stack S)
{
	if(S.bese == S.top)
		return TRUE;
	return FALSE;
}
//返回栈的长度
int StackLength(Stack S)
{
	return S.top - S.bese;
}
int main()
{
	//初始化栈
	Stack S = InitStack();
	for(int i = 0; i < 10; i++)
	{
		S = push(S, i);
	}
	printf("栈的长度为:%d\n", StackLength(S));
	printf("栈顶元素为:%d\n", GetTop(S));
	S = pop(S);
	printf("出栈后:\n");
	printf("栈的长度为:%d\n", StackLength(S));
	printf("栈顶元素为:%d\n", GetTop(S));
	S = ClearStack(S);
	if(StackEmpty(S))
		printf("此栈是空栈");
	S = DestoryStack(S);
	return 0;
}
分享到:
评论

相关推荐

    顺序栈实现括号配对

    顺序栈实现括号配对 在计算机科学中,括号配对是指在一个表达式中,各种括号之间的匹配关系。例如,在一个数学表达式中,我们可以使用小括号、中括号和大括号来表示不同的操作优先级。然而,在实际应用中,我们需要...

    C语言-顺序栈实现十进制转换为二进制-八进制-十六进制

    ### C语言顺序栈实现十进制到二进制、八进制、十六进制的转换 #### 一、概述 本篇文章将详细介绍如何使用C语言中的顺序栈来实现十进制数字向二进制、八进制以及十六进制的转换。通过分析给出的代码示例,我们将...

    顺序栈实现

    顺序栈是一种特殊的线性数据结构,它遵循“后进先出”(LIFO)的原则,即最后进入的元素最先离开。在计算机科学中,栈常用于执行表达式求值、括号匹配、函数调用、内存管理等多种任务。C++ 是一种通用的编程语言,以...

    使用顺序栈实现括号匹配

    这里我们讨论的主题是"使用顺序栈实现括号匹配",这是一个常见的算法问题,尤其在编译原理、数据结构和算法课程中经常出现。顺序栈是一种基本的数据结构,它具有操作简单、效率较高的优点,非常适合用于解决此类问题...

    用顺序栈实现括号匹配检查

    这里我们关注的是使用顺序栈来解决这个问题。顺序栈是一种数据结构,它利用数组来存储元素,遵循后进先出(LIFO)的原则,非常适合处理这种配对问题。 首先,我们要理解括号匹配的基本概念。在编程语言中,常见的...

    二叉树遍历顺序栈实现

    自己真正实现的 完整的代码 二叉树的实验代码 看别人写没有用 还得自己写 写出了就会了

    利用顺序栈实现中缀表达式的计算问题

    本资源是数据结构中利用顺序栈计算中缀表达式的一个C++代码,仅供参考,不足之处请大神们指正.

    用C语言顺序栈实现十进制和二进制的转换.docx

    用C语言顺序栈实现十进制和二进制的转换 本文档主要讲解了使用C语言实现顺序栈来实现十进制和二进制的转换。下面是相关的知识点: 1. 顺序栈的定义和实现 在C语言中,顺序栈可以使用结构体来定义。这里我们定义了...

    表达式求值顺序栈实现包括小数点运算(C语言版).docx

    该文档涉及的知识点主要集中在C语言中如何使用顺序栈实现表达式求值,特别是涉及到小数点运算。这里我们将详细探讨这个过程。 首先,我们创建了两个顺序栈:`seqstack optr` 和 `seqstack opnd`。`optr` 用于存储...

    数据结构实验课之单链表类实现和顺序栈实现

    1、 定义顺序栈类。 2、 实现如下算法: 1) 创建顺序栈; 2)插入操作:向栈顶压入值为 x 的元素; 3) 删除操作: 弹出栈顶元素,将数据输出在屏幕上; 4) 存取操作:读取栈顶元素,将数据输出在屏幕上;。 3、 ...

    顺序栈实现源码(C、C++、Java)

    本主题将深入探讨顺序栈的实现,包括C、C++和Java三种编程语言的源码分析。 首先,我们从C语言的角度来理解顺序栈。在C中,我们通常使用数组作为基础数据结构来实现顺序栈。以下是一个简单的顺序栈定义: ```c #...

    【数据结构】用c实现顺序栈

    用c实现顺序栈 c实现顺序栈 c顺序栈 顺序栈实现 用c实现顺序栈 c实现顺序栈 c顺序栈 顺序栈实现

    数据结构用顺序栈实现汉诺塔

    数据结构用栈实现汉诺塔,用递归给你讲吧,先想这个棵树Tn,先把最下面的n要搬走,就得把上面的n-1个先搬走,这个n-1个也形成一个树T(n-1),然后又把这n-1个搬到n上面又形成一个T(n-1)的树,这个你就可以画出来...

    顺序栈、链栈将10进制转为2、8、16进制源码

    本话题聚焦于一种特定的应用——使用C++实现的顺序栈和链栈,将10进制数转换为2、8、16进制。这里我们将深入探讨顺序栈和链栈的概念,以及它们如何应用于不同进制之间的转换。 首先,顺序栈是一种基于数组的数据...

    用顺序栈实现的十进制到二到九进制数的任意转换,用c实现

    这里我们关注的是如何使用顺序栈来实现从十进制到二到九进制之间的任意转换,这个过程主要涉及到计算机科学中的算法设计和数据结构。顺序栈是一种特殊的线性数据结构,它具有后进先出(LIFO)的特点,即最后压入的...

    继承实现顺序栈学习代码示例

    在传统的顺序栈实现中,通常会包含以下几个关键操作: 1. 初始化:创建一个空的栈,通常需要一个数组和一个指示当前栈顶位置的变量。 2. 入栈(push):向栈顶添加元素,需要检查栈是否已满,若未满则将元素存入...

    C++ 顺序栈和链式栈的实现 数据结构 类模板

    以下是一个简单的顺序栈实现: ```cpp template class SequentialStack { private: int top; // 栈顶指针 int capacity; // 栈的容量 T* elements; // 存储元素的数组 public: SequentialStack(int size) : ...

    顺序栈的实现.zip

    这个程序实现了顺序栈的初始化,入栈,出栈、取顺序栈的顶栈元素,退出的作用。/***顺序栈的实现***/ #include #include using namespace std; //顺序栈定义 #define OK 1 #define ERROR 0 #define ...

    c++顺序栈的实现demo

    在计算机编程中,栈...以下是一个简单的顺序栈实现的示例说明: 首先,我们定义一个顺序栈类SequentialStack,并在其构造函数中初始化栈的大小和栈顶位置。栈的大小可以根据需要设定,或者默认为一个合理的初始值。

Global site tag (gtag.js) - Google Analytics