欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第 4 章 数据结构.ppt

    • 资源ID:1584944       资源大小:955KB        全文页数:37页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    第 4 章 数据结构.ppt

    ,第 1 章 数据结构,1.1 基本数据结构与算法 1.2 线性表 1.3 栈和队列1.4 树和二叉树 1.5 查找1.6 内部排序,姓名 学号 成绩 班级 李红 9761059 95 机97.6,10,65,865,一叠书或一叠盘子。,栈顶,栈底,a1,栈s=(a1,a2,,an),a2,············,an-1,an,一种操作受限的线性表,只允许在表的一端进行插入和删除,1.栈的定义,定义:只允许在线性表的一端进行插入和删除的线性表。,与栈有关的相关术语:,1.3栈和队列,(1)栈顶: 允许插入与删除的一端称为栈顶(2)栈底: 不允许插入与删除的一端称为栈底(3)入栈:栈的插入操作(往栈中插入一个元素)(4)出栈:栈的删除操作(从栈中删除一个元素)(5)栈空: top=0(6)栈满: top=m(m为栈最大容量),进栈,出栈,栈顶,栈底,假设栈:s=(a1,a2,,an),1.3.1 栈,栈空:top=-1,栈示意图:,修改栈的原则:(考点)先进后出(FILO, First In Last Out)或后进先出(LIFO),栈顶元素总是最后入栈,而最先出栈的栈底元素总是最先入栈,而最后出栈的,堆栈操作,出栈元素顺序: B C D A,1.栈的定义,1.3栈和队列,1.3.1 栈,2.顺序栈及其运算,1)栈的两种存储结构,顺序存储结构:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。链式存储结构:用于收集计算机存储器中所有空闲存储空间,来保存自栈底到栈顶的数据元素。,顺序栈:顺序存储结构的栈称为顺序栈。链栈:链式存储结构栈称为链栈。,进栈,A,出栈,栈满,B,C,D,E,F,设数组维数为Mtop=0,栈空,此时出栈,则下溢(underflow)top=M,栈满,此时入栈,则上溢(overflow),栈空,顺序栈实现:一维数组dataM,注意:数组是倒过来图示的。故,top指向的是其箭头上面的存储空间,顺序栈实现:一维数组dataM,栈顶指针并不一定是指针变量,也可以是下标变量,#define SIZE 50typedef struct char dataSIZE; int top; SeqStack;,/*置栈空*/  void InitStack(SeqStack *S)        S->top=0;    ,/* 进栈*/void Push(SeqStack *S,char x)     if (StackFull(S)      printf(“Stack overflow”); /上溢,退出运行 exit(0) ;      S->dataS->top=x;/将x入栈 S->top=S->top+1; /栈顶指针加1  ,/* 出栈*/char Pop(SeqStack *S)   if(StackEmpty(S)    printf(“Stack underflow”); /下溢,退出运行 exit(0); S->top=S->top-1; /将栈顶指针减1       return S->dataS->top; /栈顶元素返回    ,top=0,栈空,A,top=1,假设:调用两次Push函数 Push( S, A);Push(S, B);,top=2,B,假设:调用一次Pop函数 Pop( S);,1.栈的定义,1.3栈和队列,1.3.1 栈,2.顺序栈及其运算,1)栈的两种存储结构,2)顺序栈的基本运算: 入栈、出栈与读栈顶元素,(1)入栈,新元素插入到栈顶指针指向位置栈顶指针top加1,步骤:,注意: 栈顶指针指向存储空间最后一个位置时,栈已满,不能再入栈。称为栈“上溢”错误.,栈空:top=0,思考:当栈空条件为:top=-1时,入栈步骤,1.栈的定义,1.3栈和队列,1.3.1 栈,2.顺序栈及其运算,1)栈的两种存储结构,2)顺序栈的基本运算: 入栈、出栈与读栈顶元素,(2)出栈,步骤:,栈顶指针top减1栈顶元素赋给一个指定的变量,栈顶指针为0时,栈空,不能再退栈。称为栈“下溢”错误,1.栈的定义,1.3栈和队列,1.3.1 栈,2.顺序栈及其运算,1)栈的两种存储结构,2)顺序栈的基本运算: 入栈、出栈与读栈顶元素,(3)读栈顶元素,概念:将栈顶元素赋给一个指定变量,注意:不删除栈顶元素,栈顶指针不会改变,1.栈的定义,1.3栈和队列,1.3.1 栈,2.顺序栈及其运算,1)栈的两种存储结构,2)顺序栈的基本运算:,3)栈的典型应用,进制的转换,139,10001011,(139)10=(10001011)2,除余倒序法,(139)10(?)2,139,除余倒序法,(139)10(?)2,1,1,0,1,0,0,0,1,余数栈,定义:指允许在一端插入,而在另一端进行删除的线性表。,与队列有关的相关术语:(1)队尾:允许插入的一端称为队尾。 rear队尾指针,指向队尾元素的下一个位置(2)队头:允许进行删除的一端称为队头。 front队头指针,指向队头元素。(3)入队列:队列插入操作(进队列)(4)出队列:队列的删除操作(退队列)(5)空队列:队列中无数据元素,1.3栈和队列,1.3.2 队列,定义:指允许在一端插入,而在另一端进行删除的线性表。,队列结构示意图:队列Q=(a1,a2, , an ),1.3栈和队列,1.3.2 队列,队列修改原则:先进先出(FIFO)或后进后出(LILO),队头元素总是最先进队列的,也总是最先出队列队尾元素总是最后进队列,也是最后出队列,新来的成员总是加入队尾(即不允许"加塞"),每次离开的成员总是队列头上的(不允许中途离队),即当前"最老的"成员离队。,定义:指允许在一端插入,而在另一端进行删除的线性表。,1.3栈和队列,1.3.2 队列,2.链队列: 用链表表示的队列。,Q.front,Q.rear,···,具有n个元素的队列,struct queueNode  int data;/存放数据元素   struct queueNode * next;/指向下一个结点;struct queue   struct queueNode * front;    struct queueNode * rear;struct queue *Q;,void InitQueue(struct queue *q)   /初始化队列  struct queueNode * node;  node=(struct queueNode *)malloc(sizeof(struct queueNode );  node->next=NULL;  q->front=node;  q->rear=node;,node,q.front,q.rear,带头结点的空队列,/入队列void AddQueue(struct queue * q, int e)    struct queueNode * node;    node=(struct queueNode *)malloc(sizeof(struct queueNode );    node->data=e;    node->next=NULL;    q->rear->next=node;    q->rear=node;   ,q.front,q.rear,1,又调用一次,node,/入队列void AddQueue(struct queue * q, int e)    struct queueNode * node;    node=(struct queueNode *)malloc(sizeof(struct queueNode );    node->data=e;    node->next=NULL;    q->rear->next=node;    q->rear=node;   ,q.front,q.rear,1,又调用一次,2,node,node,/出队int DelQueue (struct Queue *q)    int x;     struct QueueNode *p; p=q->front->next; q->front->next=p->next;   if(p->next=NULL) q->rear=q->front; / 防止尾指针丢失   x=p->data; free(p); return x;,q.front,q.rear,1,2,p,x,1,又调用一次,if不成立,/出队int DelQueue (struct Queue *q)    int x;     struct QueueNode *p; p=q->front->next; q->front->next=p->next;   if(p->next=NULL) q->rear=q->front; / 防止尾指针丢失   x=p->data; free(p); return x;,q.front,q.rear,2,x,1,又调用一次,p,if成立,2,新元素入队时插在头结点之后,修改rear指针删除一个元素时,修改front指针。,Q.front,Q.rear,空队列,Q.front,Q.rear,a1入队列,新元素入队时插在头结点之后,修改rear指针删除一个元素时,修改front指针。,Q.front,Q.rear,队列中有两个数据元素,出队列,删除唯一元素时, front与rear回缩到头结点,为空队列。,定义:指允许在一端插入,而在另一端进行删除的线性表。,1.3栈和队列,1.3.2 队列,3.顺序队列,定义:队列的顺序存储结构称为顺序队列,利用一组地址连续的存储单元依次存放队列中的数据元素。,约定:初始化队列令front=rear=0,入队时:将新元素插入rear所指的位置,然后将rear加1。出队时:删去front所指的元素,然后将front加1并返回被删元素。,在非空队列中头指针front始终指向队列头元素尾指针指向队尾元素的下一个位置,2.链队列: 用链表表示的队列。,举例:顺序队列头尾指针变化情况,A,B,C,D,Q.front,ABCD相继入队,Q.front,空对列,front=rear=0,举例:顺序队列头尾指针变化情况,A,B,C,D,Q.front,出队,Q.front,空队列,front=rear=0,Q.front,Q.front,Q.front,E,入队,F,队未满,却不能再入队,假溢出,定义:指允许在一端插入,而在另一端进行删除的线性表。,1.3栈和队列,1.3.2 队列,2.链队列: 用链表表示的队列。,3.顺序队列,缺点:有“假溢出”现象,为克服这点,引入循环队列。,4.循环队列,定义: 将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环形空间。,0,4,3,2,1,Q.front,对应为:,A,B,C,D,入队,A,B,C,D,出队,Q.front,Q.front,0,4,3,2,1,对应为:,C,D,入队,C,D,出队,Q.front,E,E,队尾指针指出数组外,队未满,却不能再入队,假溢出,0,若用循环队列:,即,问题是如何让rear(等于4)加1之后能够回退到0,方法一:    if(Q.rear+1=5)         Q.rear=0;    else        Q.rear=Q.rear+1;,方法二:利用“求余运算"   Q.rear=(Q.rear+1)%5;,0,4,3,2,1,对应为:,C,D,入队,C,D,出队,Q.front,E,E,F,F,继续入队,G,G,队满:Q.rear=Q.front,但是,考虑出队情况,队空:Q.rear=Q.front,因此,一般循环队列少用一个存储空间;队满条件就变为:(Q.rear+1)%M=Q.front,0,4,3,2,1,C,D,E,F,0,4,3,2,1,C,D,E,F,G,队满,指针基本运算空与满上溢与下溢,栈 队列顺序栈 顺序队列 循环队列,top:指向栈顶下一个位置,front:队头元素rear: 队尾元素的下一个位置,同左,入栈:top加1出栈:top减1,入队: 队尾rear加1 出队:队头front加1,入队: (rear+1)%m 出队:(front+1)%m,栈空:top=0栈满:top=m,队空: front= rear=0 队满: rear=m,front= rear(rear+1)%m=front,栈顶已满,不能入栈栈空,不能退栈,上溢:队满,不能入队下溢:队空,不能退队,总结,m为存储空间长度,练习1一个栈的入栈序列1,2,3,4,则它的不可能的输出序列是( )。A. 1,2,3,4 B. 4,3,2,1 C. 1,3,4,2 D. 4,1,2,3,2. 一个栈的输入序列是1,2,3,4,5,则下列序列中()是栈的输出序列。 A. 31245 B.41325 C.23415 D.142533. 假定利用数组aN顺序存储一个栈,用top表示栈顶指针, top= =-1表示栈空,并已知栈未满,当元素x进栈时所执行的操 作为()A. a-top=x B. atop-=x C. a+top=x D .atop+=x,top=-1栈空:先top1,再x赋值过来 top=0栈空:x先赋值过来,再top+1,4.一个队列的入队序列是1,2,3,4,则队列的输出序列是()A.4,3,2,1 B. 1,2,3,4 C. 1,4,3,2 D .3,2,4,15.从一个顺序循环队列中删除元素时,首先需要()A. 前移队首指针 B. 后移队首指针C. 取出队首指针所指位置上的元素 D . 取出队尾指针所指位置上的元素6.假定一个顺序循环队列的队首和队尾指针分别用front和rear表示,则判断队列空的条件为() A.front+1= =rear B.rear+1= =front C. front= =0 D . front= =rear,7.假定一个顺序循环队列存储于数组aN中,其队首和队尾指针分别用front和rear表示,则判断队列满的条件为()A. (rear-1)%N= =front B. (rear+1)%N= =front C. (front-1)%N= =rear D . (front+1)%N= =rear5,8.线性表、栈和队列都是_结构,对于栈只能在_插入和删除元素;对于队列只能在_插入元素,在_删除元素。,线性、栈顶、队尾、队头,9.设有一空栈,现有输入序列1,2,3,4,5,经过push, push, pop, push ,pop, push ,push后,对应的输出序列是_。,2,3,10. 设元素1,2,3,4,5依次进栈,若要在输出端得到序列 34251,则应进行的操作序列为push(S,1),push(S,2), _, pop(S),push(S,4),pop(S),_, _, pop(S), pop(S)。,push(S,3),pop(S),push(S,5),11.在一个具有n个存储单元的循环队列中,当队列满时共有_ 个元素。,n-1,12.栈又称为_表,队列又称为_表。,后进先出、先进先出,

    注意事项

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

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开