zoukankan      html  css  js  c++  java
  • 数据结构 —— 栈和队列

                                     数据结构——栈和队列

                                  

    目录:

    栈 --- 基础知识

    栈 --- 练习题

    队列 --- 基础知识

    栈: 

      

     

    栈示意图(后进先出):

     

    顺序栈:

    顺序栈结构定义:

    #define MAXSIZE 1024

    struct Stack{

           ElemType data[MAXSIZE];

           int top;

    };

     

    操作函数:

    push();   //入栈

    pop();     //出栈

    ……….

      

    链栈:

    struct Lstack{        //链栈

           ElemType data;

           Lstack* next;

    };

     

    链栈示意图:

     

    操作函数:

    push();    //入栈

    pop();     //出栈

    ……….

     

    注意:

    也可以直接调用系统已经写好的库函数

    #include <stack.h>

    int main()

    {

           stack <int> s;  //泛型,指定栈中数据类型

           s.push(5);              //将5送入栈

           s.pop(5);        //将5送出栈

           ……..

    }

    练习题:

    //以下是训练压栈出栈等,栈的基本用法的简单题:

    括号匹配(栈和队列) 

    十进制与八进制的转换(栈和队列)

    相同序列(栈和队列)

    回文(栈和队列)

    队列:

     

    队列示意图(先进先出):

     

    栈是只对一头操作,队列是对两头都操作。

     

    线队列:

     线队列类型定义:

    #define MAXSIZE 1024        //队列最大长度

    struct SeQueue{

           ElemType data[];

           int front,rear;        

    //front,队头,删除端,线性表的表头;rear,队尾,插入端,线性表的表尾。

           int num;  //当前队列长度

    };

     

    操作函数:

    push();    //入队

    pop();     //出队

    …………

     

    注意:

    front指向的是第一个数据的前一个位置。

    rear指向的是最后一个数据的位置。

     

     

     

    循环队列:

     

    循环队列示意图:

     

    循环队列类型定义:

    #define MAXSIZE 1024

    struct{

           ElemType data[MAXSIZE];

           int front,rear;

    };

     

    操作函数:

    push();    //入队

    pop();     //出队

    ……….

     

    注意:

    因为是循环队列,所以进队的时候不能简单的 +1了。

     

    队头指针进1:(rear+1)%MAXSIZE

    队尾指针进1:(front+1)%MAXSIZE

    队列初始化:front=rear=0

    队空条件:front==rear

    队满条件:(rear+1)%MAXSIZE == front

     

    怎么判断队满?

    正常来说队满的时候front会等于rear,这就跟开始一样了。

    所以要做一些设置。

    有多种方法。

    可以浪费最后一个位置。

    用:if((rear+1)%MAXSIZE ==fiont       //队满

    来判断队满。

     

    也有库函数

    #include <queue.h>

    使用类似栈。

    链队列:

    链队列示意图:

     

     链队列类型定义:

    struct LQueue{

           ElemType data;

           LQueue* next;

    };

     

    操作函数:

    push();    //入队

    pop();     //出队

    ……….

     

    注意:

    链队列是队尾进,队首出。

     

     

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    php动态编辑zlib扩展
    部署平台分布式锁设计
    quartz源码分析——执行引擎和线程模型
    RabbitMq核心概念和术语
    Netty SSL安全配置
    跨站脚本攻击介绍
    ssl Diffie-Hellman弱密码问题
    java server wrapper 和 maven assembly 插件
    跨站请求伪造防御
    字符编码笔记:ASCII,Unicode和UTF-8
  • 原文地址:https://www.cnblogs.com/yym2013/p/3238337.html
Copyright © 2011-2022 走看看