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;
    }
  • 相关阅读:
    ios ASI 断点下载
    ios 视频播放器MPMoviePlayerController
    ios SDWebImage 图片加载显示菊花
    ios简单的音频播放
    学iOS开发(一)——实现一款App之Foundation框架的使用
    学iOS开发(二)——实现一款App之编写自定义类
    蓝欧ios培训视频
    ios开发教程地址
    day15_雷神_前端03
    day14_雷神_前端02
  • 原文地址:https://www.cnblogs.com/yanxin880526/p/7468180.html
Copyright © 2011-2022 走看看