欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构ppt3.ppt

    • 资源ID:160575       资源大小:791KB        全文页数:66页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构ppt3.ppt

    第第3章章 栈、队列和数组栈、队列和数组n31 栈n32 队列n33 数组n34 栈的应用栈和递归 3.1 栈栈3.1.1 栈的定义和运算栈的定义: 栈是只能在一端进行插入和删除的线性表(运算受限)。由此,栈具有后进先出(LIFO)的特性。a1a2an入栈(插入)出栈(删除)栈顶:插入、删除的一端栈底:栈顶的另一端栈顶元素3.1 栈栈3.1.1 栈的定义和运算栈的基本运算:(1) 初始化栈init_stack(S): 设置栈S为空。(2) 判断栈是否为空stack_empty(S): 若栈S为空返回1(TRUE);否则返回0(FLASE)。(3) 判断栈是否为满stack_full(S): 若栈S为满返回1(TRUE);否则返回0(FLASE)。(4) 取栈顶元素值stack_top(S,x): 若栈S不空,将栈顶元素的值送x中;否则返回出错信息。3.1 栈栈3.1.1 栈的定义和运算栈的基本运算:(5) 入栈push_stack(S,x): 若栈S满,返回出错信息;否则将值为x的元素插入到栈中。(6) 出栈pop_stack(S): 若栈S空,返回出错信息;否则删除栈顶元素。3.1 栈栈3.1.2 顺序栈1、存储结构 以顺序存储方式存储的栈称为顺序栈。 可用数组datamaxsize来存放栈的元素值,并设置一个量top来标识栈顶位置。 类型定义如下:#define maxsize 50typedef struct elementtype datamaxsize; int top; seqstack; /定义了一个栈类型seqstackseqstack s1,*s; /定义了栈变量s1和指向栈类型的指针s3.1 栈栈3.1.2 顺序栈1、存储结构a1a2an 下标: 0 1 n maxsize -1datatopn-1S存储结构示意图如下:3.1 栈栈3.1.2 顺序栈2、基本运算的实现(1)初始化栈 void init_stack(seqstack *S) /S是指针 s -top = -1; /设置栈空(2)判断栈是否为空 int stack_empty(seqstack S) /S是变量 if(S.top = = -1) return 1; else return 0; 3.1 栈栈3.1.2 顺序栈2、基本运算的实现(3)判断栈是否为满 int stack_full(seqstack S) if(S.top = = maxsize-1) return 1; else return 0; (4)取栈顶元素值 void stack_top(seqstack *S,elementtype *x) if(stack_empty(*S) error(“栈空无元素”); *x = s-datas-top; /栈顶元素由参数带回 3.1 栈栈3.1.2 顺序栈2、基本运算的实现(5)入栈 void push_stack(seqstack *S,elementtype x) if(stack_full(*S) error(“栈满,入栈会溢出”); s-top+ +; s-datas-top = x; (6)出栈 void pop_stack(seqstack *S,elementtype *x) if(stack_empty(*S) error(“栈空,无元素”); *x = s-datas-top; s-top - - ; 3.1 栈栈3.1.3 链栈 采用链表存储的栈为链栈。 可使用不带头结点的单链表结构,链表头指针为栈顶,链表尾为栈底,则对链栈的操作与对单链表的操作相同,只是入栈和出栈操作在表头位置进行。an-1 a2 a1top 显然在链表的头部做栈顶是最方便的,而且没有必要象单链表那样为了运算方便附加一个头结点。 3.1 栈栈3.1.4 栈的应用实例例3.1 读入一个有限大小的整数n,并读入n个整数,然后按输入次序的相反次序输出各元素的值。 分析: 因最后输入的数据要最先输出,所以采用栈结构,可使用顺序栈或链栈。 先逐一输入数据压人堆栈中,再从堆栈中逐一将数据弹出即可。3.1 栈栈3.1.4 栈的应用实例例3.1void read_write() stack S; int n, x; printf(”Please input num int n”); scanf(“%n”, &n); /输入元素个数 init_stack(S); /初始化栈 for (i=1; inext; / u-next=P; / P=u; / L=P; /原表头指针指示新的表头指针算法如下:3.1 栈栈3.1.4 栈的应用实例例3.3 实现对任意输入的表达式的计算。分析: 表达式以字符串(用#将表达式括起来)的形式输入,需要用两个栈分别存储表达式中的操作数和运算符。 求解时,依次扫描表达式中的各基本符号(运算符、操作数),并根据扫描的内容分别处理。 具体处理如下:3.1 栈栈3.1.4 栈的应用实例例3.3定义运算符栈S和操作数栈O扫描表达式中的基本符号操作数?操作数入栈栈顶运算符0时,重复(1),(2):(1)若 N0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。(2)用N / r 代替 N3.1 栈栈3.1.4 栈的应用实例例3.4typedef int elementtype; void conversion(int N,int r) seqstack s; elementtype x; init_stack(&s); while ( N ) pushstack ( &s ,N % r ); N=N / r ; while(stack_empty (& s ) ) popsstack (&s ,&x ) ; printf ( “ %d ”,x ) ; 算法如下:3.2 队列队列3.2.1 队列的定义和运算队列的定义: 队列是只能在一端插入、另一端删除的线性表(运算受限)。由此,队列具有先进先出(FIFO)的特性。a1a2 an出队(删除)入队(插入)队头:删除端队尾:插入端队头元素队尾元素3.2 队列队列3.2.1 队列的定义和运算队列的基本运算: (1) 初始化队列init_queue(Q): 设置队列Q为空。(2) 判断队列是否为空queue _empty(Q): 若队列Q为空,返回1(TRUE);否则返回0(FLASE)。(3) 判断队列是否为满queue _full(Q): 若队列Q为满,返回1(TRUE);否则返回0(FLASE)。(4) 取队头元素值queue_front(Q,x): 若队列Q不空,将队头元素值送x中;否则返回出错信息。3.2 队列队列3.2.1 队列的定义和运算队列的基本运算: (5) 入队enqueue(Q,x): 若队列Q满,返回出错信息;否则将值为x的元素插入到队列中。(6) 出队outqueue(Q,x): 若队列Q空,返回出错信息;否则删除队头元素,并将该元素的值置x中。3.2 队列队列3.2.2 顺序队列与循环队列1、存储结构 以顺序存储方式储存的队列为顺序队列。可用数组datamaxsize存放元素,并设两个量front、rear指向队头元素的前一个位置和队尾元素的位置,则类型定义如下:#define maxsize 50typedef struct elementtype datamaxsize; int front,rear; /队头、队尾位置标示 seqqueue; /顺序队列类型seqqueueseqqueue Q1,*Q;/顺序队列的变量Q1和指向顺序队列的指针Q3.2 队列队列3.2.2 顺序队列与循环队列1、存储结构 存储结构示意图:a1a2 an 下标: 0 i j maxsize-1datafrontreari-1jQ3.2 队列队列3.2.2 顺序队列与循环队列1、存储结构 出队时头指针Q-front后移,入队时尾指针Q-rear后移,如此可能出现数组前面部分有闲置元素空间而尾指针Q-rear已指到数组最后一个元素(即Q-rear= =maxsize-1成立)的情况(假溢出假溢出)。 为此,可采用循环结构来解决,即将Q-data0做为Q-datamaxsize-1的下一个存储位置循环队列。 3.2 队列队列3.2.2 顺序队列与循环队列1、存储结构 Q-frontQ-rear01maxsize-1Q-data:3.2 队列队列3.2.2 顺序队列与循环队列1、存储结构 判定队空、队满状态: 方法一:方法一:设置一个出队或入队标志。 若最后一个操作是入队标志而导致Q-front= =Q-rear成立,则此时是队满; 若最后一个操作是出队标志而导致Q-front= =Qrear成立,则此时是队空。 方法二:方法二:少用一个元素空间(即将仅剩一个空位置时的状态作为队满)。 若要入队先判断(Q-rear+1)%maxsize= =Q-front是否成立,若成立则表示队满,不能入队。3.2 队列队列3.2.2 顺序队列与循环队列2、循环队列各基本运算的实现(基于方法二) (1) 初始化队列 void init_queue(seqqueue *Q) Q-front = 0; Q-rear = 0; /队头、队尾位置相同(2) 判断队列是否为空 int queue_empty(seqqueue *Q) if(q-front = = Q-rear) return 1; else return 0; (3) 判断队列是否为满 int queue_full(seqqueue *Q) if(q-rear +1)% maxsize = = Q-front) return 1; else return 0; 3.2 队列队列3.2.2 顺序队列与循环队列2、循环队列各基本运算的实现(基于方法二) (4) 取队头元素 void queue_front(seqqueue *Q, elementtype *x) if(queue_empty(Q) error(“队空”) else *x = Q-data(Q-front +1)% maxsize; /取队头元素 (5) 入队 void en_queue (seqqueue *Q, elementtype x) if(queue_full(Q) error(“队满”) elseQ-rear = (Q-rear +1)% maxsize; /队尾位置后移 Q-dataQ-rear = x; /元素入队 3.2 队列队列3.2.2 顺序队列与循环队列2、循环队列各基本运算的实现(基于方法二) (6) 出队 void out_queue (seqqueue *Q, elementtype *x) if(queue_empty(Q) error(“队空”) else Q-front = (Q-front +1)% maxsize; /队头位置后移 *x = QdataQfront; /当前队头位置的元素为原队头元素 3.2 队列队列3.2.3 链队列1、存储结构 队列采用链式存储方式时为链队列。 将链表头作为队头(front),链表尾作为队尾(rear) ,可以将头、尾指针合在一起构成一个结构类型。 由于入队操作虽是在表尾插入结点,但该位置也可能在链表的第一个位置,所以最好采用带头结点的链表形式,以使操作简便。3.2 队列队列3.2.3 链队列1、存储结构 存储结构类型定义如下: typedef struct node *front, *rear ; linkqueue; linkqueue *Q; /指向链队列的指针Qa1 an frontrearQ3.2 队列队列3.2.3 链队列2、链队列各基本运算的实现(1) 初始化队列 void init_queue(linkqueue *Q) Q-front = (node *)malloc(sizeof(node); /产生头结点 Q-rear = Q-front; /头、尾

    注意事项

    本文(数据结构ppt3.ppt)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开