• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > 数据结构教程 第十课 栈的表示与实现

数据结构教程 第十课 栈的表示与实现

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了数据结构教程,数据结构教程李春葆,数据结构视频教程,数据结构教程第四版,c语言数据结构教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

本课主题: 栈的表示与实现

教学目的: 栈的数据类型定义、栈的顺序存储表示与实现

教学重点: 栈的顺序存储表示与实现方法

教学难点: 栈的定义

授课内容:

一、栈的定义

栈是限定仅在表尾进行插入或删除操作的线性表。

栈的表尾称为栈顶,表头称为栈底,不含元素的空表称为空栈。

栈的抽象数据类型定义:

ADT Stack{

数据对象:D={ai|ai(- ElemSet,i=1,2,...,n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai(- D,i=2,...,n}

基本操作:

InitStack(&S) 构造一个空栈S

DestroyStack(&S) 栈S存在则栈S被销毁

ClearStack(&S) 栈S存在则清为空栈

StackEmpty(S) 栈S存在则返回TRUE,否则FALSE

StackLength(S) 栈S存在则返回S的元素个数,即栈的长度

GetTop(S,&e) 栈S存在且非空则返回S的栈顶元素

Push(&S,e) 栈S存在则插入元素e为新的栈顶元素

Pop(&S,&e) 栈S存在且非空则删除S的栈顶元素并用e返回其值

StackTraverse(S,visit())栈S存在且非空则从栈底到栈顶依次对S的每个数据元素调用函数visit()一旦visit()失败,则操作失败

}ADT Stack

二、栈的表示和实现

栈的存储方式:

1、顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置

2、链栈:利用链表实现

顺序栈的类C语言定义:

typedef struct{

SElemType *base;

SElemType *top; //设栈顶栈底两指针的目的是便于判断栈是否为空

int StackSize; //栈的当前可使用的最大容量.

}SqStack;

顺序栈的的模块说明:

struct STACK {

SElemType *base;

SElemType *top;

int stacksize;

};

typedef struct STACK Sqstack;

Status InitStack(SqStack &S);

Status DestroyStack(SqStack &S);

Status ClearStack(SqStack &S);

Status StackEmpty(SqStack S);

int StackLength(SqStack S);

Status GetTop(SqStack S,SElemType &e);

Status Push(SqStack &S,SElemType e);

Status Pop(SqStack &S,SElemType &e);

Status StackTraverse(SqStack S,Status (*visit)());

Status InitStack(SqStack &S) {

S.base=(SelemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType));

if(!S.base)exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INI_SIZE;

return OK;

}//IniStack

Status DestroyStack(SqStack &S); {

}//DestroyStack

Status ClearStack(SqStack &S); {

S.top=S.base;

} //ClearStack

Status StackEmpty(SqStack S); {

if(S.top==S.base) return TRUE;

else return FALSE;

} //StackEmpty

int StackLength(SqStack S); {

int i; SElemType *p;

i=0;

p=S.top;

while(p!=S.base) {p++; i++; }

} //stackLength

Status GetTop(SqStack S,SElemType &e); {

if(S.top==S.base) return ERROR;

e=*(S.top-1);

return OK;

} //GetTop

Status Push(SqStack &S,SElemType e); {

if(S.top - s.base>=S.stacksize) {

S.base=(ElemType *) realloc(S.base,

(S.stacksize + STACKINCREMENT) * sizeof(ElemType));

if(!S.base)exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

} //Push

Status Pop(SqStack &S,SElemType &e); {

if(S.top==S.base)

return ERROR;

e=*--S.top;

return OK;

}//Pop

Status StackTraverse(SqStack S,Status (*visit)()); {

}//StackTraverse

以上伪代码的C语言源码

三、总结

栈的定义

栈的顺序存储实现

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 数据结构教程
  • 数据结构教程 第十课 栈的表示与实现
  • 数据结构教程 第九课 循环链表与双向链表
  • 数据结构教程 第八课 线性表的链式表示与实现
  • 数据结构教程 第七课 实验一 线性表的顺序存储实验
  • 数据结构教程 第六课 线性表的顺序表示和实现
  • 数据结构教程 第五课 线性表的类型定义
  • 数据结构教程 第三十五课 实验七 查找
  • 数据结构教程 第三十四课 插入排序、快速排序
  • 数据结构教程 第三十三课 哈希表(二)

相关文章

  • 2017-06-28数据结构教程 第四十课 总复习
  • 2017-06-28数据结构教程
  • 2017-06-28数据结构教程 第三十七课 实验八 排序实验
  • 2017-06-28数据结构教程 第二十三课 二叉树的存储结构
  • 2017-08-17UVa1584 环状序列 (Circular Sequence)
  • 2017-06-28java中实现希尔排序算法
  • 2017-06-28数据结构教程 第三十二课 哈希表(一)
  • 2017-06-28九宫问题(八数码)求解过程动态演示
  • 2017-06-28链表的建立、插入和删除
  • 2017-06-28数据结构教程 第三十五课 实验七 查找

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 迭代算法与递归算法的概念及区别
    • C#算法设计与分析-寻找素数
    • 数据结构实验之栈三:后缀式求值
    • 面向对象编程(OOP)理解
    • 模拟退火算法求解TSP问题
    • 数据结构教程 第三十八课 文件概念、顺序文件
    • 数据结构教程 第三十四课 插入排序、快速排序
    • 数据结构教程 第三十二课 哈希表(一)
    • 九宫问题(八数码)求解过程动态演示
    • 数据结构教程 第二十三课 二叉树的存储结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有