• 栈与队列


    栈的存储结构分为顺序存储结构(用数组实现)和链表存储结构(用链表实现)

    相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。


    不同点:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

    栈必须按"后进先出"的规则进行操作:比如说,小学老师批改学生的作业,如果不打乱作业本的顺序的话,那么老师批改的第一份作业一定是最后那名同学交的那份作业,如果把所有作业本看作是一个栈中的元素,那么最后一个同学交的作业本就是栈顶元素,而第一个同学交的,也就是最低端的作业本,就是栈底元素,这就是对栈的读取规则。

    而队列必须按"先进先出"的规则进行操作:打个比方,一些人去银行办理业务,一定是先去排队的最先得到服务,当然他也是第一个走出银行的(假设这些人都在一个窗口排队)。如果把所有这些等候服务的人看作是队的元素,第一个人就是对头元素,相应的,最后一个人就是队尾元素。这是队的读取规则。

    应用:栈和队列是在程序设计中被广泛使用的两种线性数据结构。其中,数值转换,括号匹配检验,删除字符或行是栈的广泛应用,现以数值转换为例进行介绍。


    int MAX=1000;
    
    int s[MAX];
    int base,top;
    
    void push(int a)
    { 
       top++;
       s[top]=a;
    }
    
    int pop() //出栈函数
    {
       return s[top--]; 
    }
    
    int main()
    {
        int i;
        int stacksize;
        base=0; 
        top=-1;
        for(i=0;i<MAX;i++)
        {
            //scanf("%d",&s[++top]); //,现在top即指向栈顶,如果为top++,则此时top指向的是栈顶的上一个元素
    	scanf("%d",&a);
            push(a); 
         }
        stacksize = top-base;
        n=top;
        for(i=n;i>=0;i--)
          printf("%3d",s[top--]);
        
        return 0;
    }

    #denfine MAX 100;
    int q[M];
    int front, rear;
    
    
    int mian()
    {
       int i;
       front=0;
       rear=0;
       for(i=0;i<MAX;i++)
         scanf("%d",q[rear++]);
    
    
       for(i=0;i<rear;i++)
         printf("%3d",q[front++]);
    
        return 0;   
    }



  • 相关阅读:
    如何使用shell脚本快速排序和去重文件数据
    centos7下搭建git和gitlab版本库
    Jenkins安装部署
    那日了狗的上半年的兼容性问题,下半年来解决。
    RecyclerView notifyDataSetChanged不起作用
    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法
    java.lang.UnsatisfiedLinkError: Couldn't load hyphenate_av from loader dalvik.system.PathClassLoader
    android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded
    apache https配置
    docker进入容器的方式
  • 原文地址:https://www.cnblogs.com/mingrigongchang/p/6246282.html
Copyright © 2020-2023  润新知