数据结构之栈(1)——顺序栈

栈作为一种特殊的线性表,在计算机中有顺序储存结构和链式存储结构两种存储结构,根据这个我们把栈分为顺序栈链栈

顺序栈

栈顶:用top来动态地表示栈顶元素在顺序栈中的位置,当top=-1时表示栈为空

这个是栈这个数据类型的定义

typedef char ElemTypeStack;
typedef struct{
        ElemTypeStack elem[MAXSIZE];
        int top;
}FirStack;

用一个数组来存储数据,对应的下标表示他在栈中的位置,top表示栈顶元素对应的下标,若栈为空,则top=-1

栈的初始化

void Init(FirStack *s)
{
    s->top=-1;
} 

我们用一个顺序栈指针来表示一个顺序栈,初始化一个顺序栈为空时,我们设置他的top值为-1

顺序栈的入栈操作

//入栈
bool PushStack(FirStack *s,ElemTypeStack x)
{
    if(s->top==MAXSIZE-1)
    return false;
    else
    {
        (s->top)++;
        s->elem[s->top]=x;
        return true;
    }
} 

入栈时,首先应检查栈是否已满,若未满,则top自增,并将x置入栈顶

上溢:若栈已满,还要进栈

顺序栈的出栈

bool PopStack(FirStack *s,ElemTypeStack x)
{
    if(s->top==-1)
    return false;
    else
    {
        x=s->elem[s->top];
        s->top--;
        return true;
    }
}

首先应检查栈是否为空,若未空,则将栈顶元素的值赋给x,然后top自减

下溢:若栈为空还要出栈,则会发生栈的下溢

顺序栈之读栈顶元素

//读栈顶元素
bool GetTop(FirStack *s,ElemTypeStack x)
{
	if(s->top==-1)
	return false;
	else
	{
		x=s->elem[s->top];
		return true;
	}
}

  读栈顶元素之前,先判断栈是否为空,若不为空,则将栈顶元素赋值给x

时间: 2024-10-12 16:52:09

数据结构之栈(1)——顺序栈的相关文章

数据结构第七篇——顺序栈

?注:未经博主同意,不得转载. 栈(stack)是常用的重要数据结构,其应用十分广泛.栈是一个操作受限的线性表,其插入和删除操作都在表的同一端进行. 其中允许操作的一端称为栈顶(top),另一端称为栈底(bottom),不含元素的栈称为空栈. 栈的修改是按后进先出的原则进行的,因此,栈称为后进先出表(Last In First Out,LIFO).称插入元素的操作为入栈(push),删除元素的操作为出栈(pop). 栈由元素列表.指向栈顶的下标或指针以及栈的操作集组成.栈的具体实现有两种方式:顺

[C++]数据结构:栈之顺序栈

0 栈的基本概念 栈,根据存储结构的不同,可分为:链栈和顺序栈. 1 顺序栈的知识概览 2 编程复现 2.1 定义基本数据结构 typedef char DataType; // 基本数据类型 enum Status { ERROR, OK, OVERFLOW };// 状态(码) : 枚举类型 #define MAXSIZE_STACK 100 //栈内最大元素数 typedef struct { // 顺序栈 DataType *base; // 栈底指针 (NULL:栈结构不存在:[重点]

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

数据结构(C语言版)顺序栈相关算法的代码实现

这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的是从栈底想栈顶方向运行visit()函数,这是之前的学习中所忽略的:栈的遍历解除了栈的输出顺序只能从栈顶像栈底方向的限制. 二.清空栈时要不要将stacksize重置 网上看到有的人在实现清空栈这一功能时,将stacksize重置为0,我觉得有点问题,起初的想法是将其重置为初始化时的值,在与同学讨论

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************

【数据结构之旅】顺序栈入门操作

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{    

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小. Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数. #ifndef STACK #define STACK //栈的抽象基类 template<class T> class Stack { public: Stack(){} ~Stack(){} virtual void Push(const T& x)=0; virtual bool Pop(T& x)=0; virtual bool getTop(T

Java栈之顺序栈存储结构实现

一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实现 顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,栈底位置固定不变,它的栈顶元素可以直接通过顺序栈底层数组的数组元素arr[size - 1]来访问. 1 package com.ietree.basic.datastructure.stack; 2 3 import java.

栈:顺序栈和链式堆栈

一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用. 二.堆栈的抽象数据类型: 数据集合: 堆栈的数据