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));
        }

  • 相关阅读:
    ReSharper.8.0.14.856注册码
    asp.net 301重定向代码
    WebResource.axd 404 错误
    【原创】asp.net导出word 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a
    C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
    Repository 设计模式介绍
    将15位身份证转换成18位
    清理数据库木马文件
    Oracle的创建表空间及用户
    使用python脚本执行地理处理工具
  • 原文地址:https://www.cnblogs.com/rcklos/p/12907613.html
Copyright © 2011-2022 走看看