- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 栈和队列 栈和队列逻辑结构与线性表相同。 其特殊性在于栈和队列是操作受限制的线性表。 栈按“后进先出”的规矩进行操作。 队列按“先进先出”的规则进行操作。 3.1栈一、栈的类型定义 栈顶:表尾,top 栈底:表头,bottom 空栈:不含元素的空表 栈的抽象数据类型 ADT Stack{ 数据对象:D={ai | ai ? ElemSet , i=1,2,... ,n,n=0} 数据关系:R={ai-1 ,ai | ai-1 ,ai ? D ,i=2,...,n} 基本操作: 栈初始化:StackInit() 判栈空:StackEmpty(S) 入栈:Push(S,x) 出栈:Pop(S) 取栈顶元素:StackGetTop(S) 销毁栈:StackDestroy (S) 清空栈: StackClear (S) 求栈长:StackLength(S) }ADT Stack 二、栈的表示和实现 栈是操作受限制的线性表 顺序栈:顺序存储结构的栈 数组 链栈:链式存储结构的栈 单链 顺序栈 栈底位置设置在数组的一端(通常为低下标的一端,0下标) 栈顶随插入删除操作变化,用一整型变量top存放栈顶的位置(下标) 数据入栈或出栈时使整形变量 top分别加1或减1。 顺序栈的类型描述: #define MAXSIZE 100 ∥用户需要的最大栈容量 typedef struct {ElemType data[MAXSIZE]; ∥栈中元素 int top; ∥栈顶指针,指向栈顶元素 }SeqStack; SeqStack S; S.top 栈顶指针 相对地址 “游标” 下标 S.data[S.top] 当前栈顶元素 顺序栈基本操作的实现 1)顺序栈的初始化 SeqStack SeqStackInit() {//构造一个空栈S SeqStack S; S.top=-1; return S; } 2)栈判空/判满/取栈顶元素 判空:S.top==-1 判满:S.top==MAXSIZE-1 取栈顶元素 S.data[S.top] 栈中元素的个数S.top+1 3)入栈 void SeqStackPush(SeqStack S, ElemType x) {∥插入元素x为新的栈顶元素 if (S.top==MAXSIZE-1) { printf(“栈满\n”; exit(0); } ∥栈满,退出运行 S.top++; S.data[S.top]=x; } 4)出栈 ElemType SeqStackPop(SeqStack S) {∥若栈S不空,删除S的栈顶元素,并返回其值 if(S.top==-1) { printf(“栈空\n”); exit(0); }∥栈已空,退出运行 x=S.data[S.top]; S.top--; return x; } 共享栈 双向栈 双向栈的类型定义: #define m 100 ∥栈容量(向量大小) typedef struct DStack {ElemType data[m]; int top[2]; }DStack; 初始化时,top[0]=-1和top[1]=m表示栈空 栈顶相遇时top[1]-top[0]=1表示栈满 入栈时栈顶指针相向移动 可推广至多栈共享 链栈 通常链栈用单链表表示,因此其结点结构与单链表的结构相同。 链栈的结点类型定义: typedef struct StackNode {ElemType data; struct StackNode *next; }StackNode,*LinkedStack; 链栈可以由栈顶指针唯一确定。 LinkedStack top; top=NULL 表示空栈。 链栈的基本操作实现 1)链栈的初始化 LinkedStack LinkedStackInit() {∥构造一个空栈,栈顶指针为top LinkedStack top; top=NULL; return top; } 2) 判空 top==NULL; 判满 取栈顶元素 top-data; 3)进栈(入栈) LinkedStack LinkedStackPush(LinkedStack top ,ElemType x) {∥在链栈插入元素x,x成为新的栈顶元素 s=(StackNode*)malloc(siz
您可能关注的文档
- 公司安全教育.ppt
- 常见酸碱盐复习课.ppt
- 计算机三级网络技术2.1.ppt
- 我爱你,从A到Z(图集).ppt
- chapter4 应收项目.ppt
- 环境政策学课件【第一章_导论】.ppt
- 第一章计算机基础知识-3.ppt
- 数据结构课件 附录A_课程设计实习指导.ppt
- 奥斯维辛没有什么新闻(我).ppt
- 企业上市税务规划--2010年5月培训资料.ppt
- 广东省东莞市2024-2025学年八年级上学期生物期中试题(解析版).pdf
- 非遗剪纸文创产品开发经理岗位招聘考试试卷及答案.doc
- 广东省东莞市2024-2025学年高二上学期期末教学质量检查数学试题.pdf
- 体育安全理论课件图片素材.ppt
- 3.1 公民基本权利 课件-2025-2026学年道德与法治八年级下册 统编版 .pptx
- 广东省潮州市湘桥区城南实验中学等校2024-2025学年八年级上学期期中地理试题(解析版).pdf
- 大数据运维工程师岗位招聘考试试卷及答案.doc
- 广东省深圳市福田区八校2026届数学八年级第一学期期末教学质量检测模拟试题含解析.doc
- 广东省潮州市湘桥区城基初级中学2024-2025学年八年级上学期11月期中考试数学试题(解析版).pdf
- 广东省潮州市湘桥区城西中学2024-2025学年八年级上学期期中地理试题(解析版).pdf
原创力文档


文档评论(0)