zoukankan      html  css  js  c++  java
  • 栈和队列

    栈实现的是一种后进先出(last in, first-out, LIFO)策略。

    本文利用数组实现了栈的三种操作:

    PUSH(压入,即INSERT)

    POP(弹出,即DELETE)

    EMPTY(测试栈是否为空)

    三种栈操作的执行时间都为O(1)

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    
    int top=0;
    
    int stack_empty(int s[]);
    int push(int s[], int x);
    int pop(int s[]);
    
    int main(void)
    {
        int s[10];
        if(stack_empty(s)) {
            printf("the stack is empty!
    ");
        } else {
            printf("the stack is not empty!
    ");
        }
        push(s,9);
        push(s,12);
        printf("pop %d
    ",pop(s));
        printf("pop %d
    ",pop(s));
        
    }
    
    int stack_empty(int s[])
    {
        if(top==0)
            return TRUE;
        else return FALSE;
    }
    
    int push(int s[], int x)
    {
        s[++top] = x;
    }
    
    int pop(int s[])
    {
        if(stack_empty(s)) {
            printf("underflow.
    ");
            exit(1);
        } else {
            return s[top--];
        }
    }

    队列实现的是一种先进先出(first-in, first-out, FIFO)策略。

    本例使用数组实现了循环队列,示意图如下:

    它有下面2个操作

    ENQUEUE(入队,即INSERT)

    DELETE(出队,即DELETE)

    两种操作的执行时间都为O(1)

    /*
     * 利用数组实现循环队列
    */
    #include <stdio.h>
    #include <stdlib.h>
    
    #define ARRAY_SIZE 10
    
    void enqueue(int queue[], int x);
    int dequeue(int queue[]);
    
    int head,tail;
    int queue[ARRAY_SIZE];
    
    int main(void)
    {
        enqueue(queue, 25);
        enqueue(queue, 37);
        enqueue(queue, 12);
        
        printf("%d
    ", dequeue(queue));
        printf("%d
    ", dequeue(queue));
        printf("%d
    ", dequeue(queue));
        printf("%d
    ", dequeue(queue));
    
    }
    
    void enqueue(int q[], int x)
    {
        if(tail+1 == head) {
            printf("queue is overflow!
    ");
            exit(1);
        }
        
        q[tail] = x;
        if(tail == ARRAY_SIZE-1)
            tail=0;
        else
            tail++;
    }
    
    int dequeue(int q[])
    {
        int x;
        
        if(tail == head) {
            printf("queue is underflow!
    ");
            exit(1);
        }
        
        x = q[head];
        if(head == ARRAY_SIZE-1)
            head=0;
        else
            head++;
        return x;
    }
  • 相关阅读:
    在Ubuntu下安装Apache
    linux 安装jdk 配置tomcat
    linux命令——rmdir
    linux命令——rm
    WebApi路由解析增加版本控制
    eclipse Dynamic web module相关问题
    mysql 5.7.18 windows zip安装
    微信扫描二维码登录网站技术原理
    Maven实战(八)——常用Maven插件介绍(下)
    Maven实战(七)——常用Maven插件介绍(上)
  • 原文地址:https://www.cnblogs.com/yanxin880526/p/7468180.html
Copyright © 2011-2022 走看看