博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 堆栈
阅读量:4329 次
发布时间:2019-06-06

本文共 2772 字,大约阅读时间需要 9 分钟。

堆栈的抽象数据类型描述

堆栈(Stack):具有一定操作约束的线性表

  • 只在一端(栈顶,Top)做插入、删除
  • 后入先出:Last In First Out(FIFO)

 

类型名称:堆栈(stack)

数据对象集:一个有0个或多个元素的又穷线性表。

操作集:长度为MaxSize的堆栈S∈Stack,堆栈元素item∈ElementType

1、Stack CreateStack(int MaxSize):生成空堆栈,其最大长度为MaxSzie;

2、int IsFull(Stack S, int MaxSize):判断堆栈S是否已满

3、void Push(Stack S, ElementType item):将元素item压入堆栈

4、int IsEmpty(Stack S):判断堆栈S是否为空

5、ElementType Pop(Stack S):删除并返回栈顶元素

 

栈的顺序存储实现

  栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。

#define MAXSIZE 100typedef struct SNode *Stack;struct SNode{    ElementType Data[MAXSIZE];    int Top;}
定义

入栈

void Push(Stack PtrS, ElementType item){    if(PtrS->Top == MAXSIZE - 1) {        printf("Stack full");        return;    } else {        PtrS->Data[++(PtrS->Top)] = item;        return;     }}
push

出栈

ElementType Pop(Stack PtrS){    if(PtrS->Top == -1) {        printf("Stack Empty");        return ERROR;    } else        return(PtrS->Data[(PtrS->Top)--]);}
pop

 

例子:请用要给数组实现两个堆栈,要求最大地利用数组空间,使数组只要有空间入栈操作就可以成功。

1 #define MAXSIZE 100 2 struct DStack{ 3     ElementType Data[MAXSIZE]; 4     int Top1; 5     int Top2; 6 }S; 7 S.Top1 = -1; 8 S.Top2 = MAXSIZE; 9 10 void Push(struct DStack *PtrS, ElementType item, int Tag)11 {12     if(PtrS->Top2 - PtrS->Top1 == 1) {13         printf("stack full");14         return;15     }16     if(Tag == 1)17         PtrS->Data[++(PtrS->Top1)] = item;18     else19         PtrS->Data[--(PtrS->Top2)] = item;20 }21 22 ElementType Pop(stuct DStack *PtrS, int Tag)23 {24     if(Tag == 1) {25         if(PtrS->Top == -1) {26             ptintf("Stack1 Empty");27             return;28         } else {29             return(PtrS->Data[(PtrS->Top1)--])30         }31    } else {32        if(PtrS->Top2 == MAXSIZE) {33            printf("Stack2 Empty");34            return;35        } else {36            return PtrS->Data[(PtrS->Top2)--];37        }38    }39 }
例子

 

堆栈的链式存储实现

  站的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作智能在链栈的栈顶进行。栈顶指针Top应该在链表的哪一头?

typedef struct SNode *Stack;struct SNode{    ElementType Data;    struct SNode *Next;};
定义

堆栈初始化

Stack CreateStack(){    Stack = s;    S = (Stack)malloc(sizeof(struct SNode));    S->Next = NULL;    return S;}
CreateStack

判断堆栈S是否为空

int IsEmpty(Stack S){    return (S->Next == NULL);}
IsEmpty

push操作

void Push(ElementType item, Stack S){    struct SNode *TmpCell;    TmpCell = (SNode)malloc(sizeof(struct SNode));    TmpCell->Data = item;    TmpCell->Next = S->Next;    S->Next = TmpCell;}
push

pop操作

ElementType Pop(Stack S){    struct SNode *FirstCell;    ElementType TopElem;    if(IsEmpty(S)) {        printf("Stack Empty");        return NULL;    } else {        FirstCell = S->Next;        S->Next = FirstCell->Next;        TopElem = FirstCell->Data;        free(FirstCell);        return TopElem;    }}
pop

 

转载于:https://www.cnblogs.com/ch122633/p/8595395.html

你可能感兴趣的文章
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>