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

    今日一言:
    当人们做不到一些事情的时候,
    他们就会对你说你也同样不能。
      ——《当幸福来敲门》


    数据结构 —— 栈和队列

    3.1

    栈: 限定仅在表尾进行插入或删除操作的线性表。
    LIFO结构: 后进先出
    FILO结构: 先进后出

    栈的实现代码(顺序栈):

    #include <stdio.h>
    #include <stdlib.h>

    #define NullElem -1

    typedef int Elem;

    typedef struct{
        Elem *base;
        Elem *top;
        int size;
        int MaxSize;
    }SqStack;

    // 初始化线性表 
    void initSqStack(SqStack *stackint maxSize){
        stack->base = (Elem *)malloc(sizeof(Elem)*maxSize);
        stack->top = stack->base;
        stack->size = 0;
        stack->MaxSize = maxSize;
    }

    // 入栈
    void pushSq(SqStack *stack, Elem elem){
        ifstack->size >= stack->MaxSize ) return;
        stack->top++;
        stack->size++;
        *stack->top = elem;
    }

    // 出栈
    Elem popSq(SqStack *stack){
        if( !stack->size ) return NullElem;
        Elem elem = *stack->top;
        stack->top--;
        stack->size--;
        return elem;
    }

    // 获取当前栈长度 
    int getSize(SqStack *stack){
        return stack->size;
    }

    // 获取栈容量 
    int getMaxSize(SqStack *stack){
        return stack->MaxSize;
    }

    3.2 队列

    队列: 队列是一种先进先出的线性表。
    FIFO结构: 先进先出

    知识让你看得懂淘宝简介在说什么。⬇⬇⬇

    淘宝没给红包
    淘宝没给红包

    队列的实现代码:

    #include <stdio.h>
    #include <stdlib.h>

    #define NullElem 0

    typedef int Elem;

    typedef struct{
        Elem *data;
        int front;
        int rear;
        int size;
        int MaxSize;
    }SqQueue;

    // 初始化线性表 
    void initSqQueue(SqQueue *queueint maxSize){
        queue->data = (Elem *)malloc(sizeof(Elem)*maxSize);
        queue->rear = 0;
        queue->front = 0;
        queue->size = 0;
        queue->MaxSize = maxSize;
    }

    // 入队 
    void enSqQueue(SqQueue *queue, Elem elem){
        ifqueue->size >= queue->MaxSize ) return;
        *(queue->data+queue->rear) = elem;
        queue->rear = (queue->rear+1)%queue->MaxSize;
        queue->size++;
    }

    // 出队 
    Elem deSqQueue(SqQueue *queue){
        if( !queue->size ) return NullElem;
        Elem elem = *(queue->data+queue->front);
        queue->front = (queue->front+1)%queue->MaxSize;
        queue->size--;
        return elem;
    }

    // 获取当前队列长度 
    int getSize(SqQueue *queue){
        return queue->size;
    }

    // 获取队列容量 
    int getMaxSize(SqQueue *queue){
        return queue->MaxSize;
    }

    // 调试 
    void main(void){
        int i;
        SqQueue queue;
        initSqQueue(&queue,50);
        for( i = 0 ; i<10; i++){
            enSqQueue(&queue,i);
            printf("%d ",i);
        }
        putchar(' ');
        for( i = 0 ; i<5; i++){
            printf("%d ",deSqQueue(&queue));
        }
        putchar(' ');
        for( i = 50 ; i<55; i++){
            enSqQueue(&queue,i);
            printf("%d ",i);
        }
        putchar(' ');
        int size = getSize(&queue);
        for( i = 0 ; i<size; i++){
            printf("%d ",deSqQueue(&queue));
        }

  • 相关阅读:
    swiper.js 点击链接跳转后再次返回到轮播原位置
    KVO和KVC
    XML与HTML的区别
    iOS UIAppearance使用详解
    文件处理
    IOS 四种数据永久保存的方式
    UIImage图片处理(更改颜色,修改透明度,缩小,合并图片)
    从一个视图控制器切换到另一个视图控制器的几种方式
    NSString的常用方法
    NSURLRequest和NSURLConnection
  • 原文地址:https://www.cnblogs.com/rcklos/p/12907613.html
Copyright © 2011-2022 走看看