实验二栈和队列(基本操作)讲解.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二栈和队列(基本操作)讲解

 PAGE 13 实验二 栈和队列 1、实验目的: 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现; 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。 2、实验要求: 复习课本中有关栈和队列的知识; 用C语言完成算法和程序设计并上机调试通过; 撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。 3、实验内容 [实验1] 栈的顺序表示和实现 实验内容与要求: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6)置空顺序栈 分析: 栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。 对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p-top= =MAXNUM-1,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。 出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。 注意: (1)顺序栈中元素用向量存放 (2)栈底位置是固定不变的,可设置在向量两端的任意一个端点 (3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置 #include stdio.h #include malloc.h typedef int SElemType; typedef int Status; #define INIT_SIZE 100 #define STACKINCREMENT 10 #define Ok 1 #define Error 0 #define True 1 #define False 0 typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; //初始化栈 Status InitStack(SqStack *s) { s-base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType)); if(!s-base) { puts(存储空间分配失败!); return Error; } s-top = s-base; s-stacksize = INIT_SIZE; return Ok; } //清空栈 Status ClearStack(SqStack *s) { s-top = s-base; return Ok; } //栈是否为空 Status StackEmpty(SqStack *s) { if(s-top == s-base) return True; else return False; } //销毁栈 Status Destroy(SqStack *s) { free(s-base); s-base = NULL; s-top = NULL; s-stacksize=0; return Ok; } //获得栈顶元素 Status GetTop(SqStack *s, SElemType e) { if(s-top == s-base) return Error; e = *(s-top - 1); return Ok; } //压栈 Status Push(SqStack *s, SElemType e) { if(s-top - s-base = s-stacksize) { s-base = (SElemType *)realloc(s-base, (s-stacksize + STACKINCREMENT) * sizeof(SElemType)); if(!s-base) { puts(存储空间分配失败!); return Error; } s-top = s-base + s-stacksize; s-stacksize += STACKINCREMENT; } *s-top++ = e; return Ok; } //弹栈 Status Pop(SqStack *s, SElemType *e) { if(s-top == s-base) return Error; --s-top; *e = *(s-t

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档