• 使用数组实现队列----《数据结构与算法分析---C语言描述》


    一、h文件:my_que.h

    #ifndef  _MY_QUE_H_
    #define  _MY_QUE_H_
    struct QueRecord;
    typedef struct QueRecord* queue;
    
    
    
    
    typedef  int element_type;
    
    
    int IsEmpty(queue q);
    int IsFull(queue q);
    queue creat_que(int max_element);
    void make_empty(queue q);
    void enqueue(element_type x,queue q);
    element_type front_que(queue q);
    void dequeue(queue q);
    element_type front_deque(queue q);
    void dispose_que(queue q);
    
    
    #define mini_que 5
    
    
    struct QueRecord 
    {
        int capacity;
        int size;
        int front;
        int rear;
        element_type *array;
    };
    
    
    
    
    #endif



    二、c文件:my_que.c

    hangma@ubuntu:~/test/test/protest/que_test$ cat my_que.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "my_que.h"
    
    
    int IsEmpty(queue q)
    {
        return q->size == 0;
    }
    
    
    int IsFull(queue q)
    {
        return q->size == q->capacity;
    }
    
    
    queue creat_que(int max_element)
    {
        queue q;
        
        if(max_element < mini_que)
        {
    printf("the size of que is too small
    ");
    exit(-2);
        }
    
    
        q = (queue)malloc(sizeof(struct QueRecord));
        if(q == NULL)
        {
    printf("can't alloca memory
    ");
            exit(-1);
        }
    
    
    
    
        q->array = (element_type *)malloc(max_element * sizeof(element_type));
        if(q->array == NULL)
        {
    printf("can't alloca the mem
    ");
    exit(-1);
        }    
        q->capacity = max_element;
    
    
        make_empty(q); 
        return q;
    }
    
    
    void make_empty(queue q)
    {
        if(q != NULL)
        {
    q->size = 0;
            q->front = 1;
    q->rear = 0;
        }
    }
    
    
    
    
    int IsQueEnd(int value,queue q)
    {
        if( ++value == q->capacity)
        return 0;
        else 
    return value;
    }
    
    
    
    
    void enqueue(element_type x,queue q)
    {
        if(q == NULL)
        {
    printf("the que is not exsit
    ");
    exit(-2);
        }
    
    
        if(IsFull(q))
        {
    printf("the que is full
    ");
    exit(-2);
        }
    
    
        q->size++;
        q->rear = IsQueEnd(q->rear,q);
        q->array[q->rear] = x;
    }
    
    
    element_type front_que(queue q)
    {
        if(IsEmpty(q))
        {
    printf("the que is empty
    ");
    exit(-3);
        }
    
        return q->array[q->front];
    }
    
    
    void dequeue(queue q)
    {
        if(IsEmpty(q))
        {
    printf("the que is empty
    ");
    exit(-4);
        }
    
    
        q->size--;
        q->front = IsQueEnd(q->front,q);
    }
    
    
    element_type front_deque(queue q)
    {
        if(IsEmpty(q))
        {
    printf("the que is empty");
    exit(-5);
        }
    
    
        q->size--;
        int front = q->front;
        q->front = IsQueEnd(q->front,q);
        return q->array[front];
    }
    
    
    void dispose_que(queue q)
    {
        if(q)
        {
    if(q->array)
        {
       free(q->array);
    }
    free(q);
        }
    }
    
    
    int main(int argc ,char *argv[])
    {
        element_type val;
        int i = 0;
        queue q;
       
        q = creat_que(10);
        while( ++i <= 10 )
        {
    printf("now ,please input the value:
    ");
    scanf("%d",&val);
    printf("the val is %d
    ",val);
    enqueue(val,q);
    printf("the q size is %d
    ",q->size);
        } 
    
    
        while(q->size)
        {
    val = front_deque(q);
    printf("the val is %d
    ",val);
    sleep(1);
        }
    
    
        dispose_que(q);
        return 0;
    }
    



    三、打印输出:

    hangma@ubuntu:~/test/test/protest/que_test$ ./my_que 
    now ,please input the value:
    1
    the val is 1
    the q size is 1
    now ,please input the value:
    2
    the val is 2
    the q size is 2
    now ,please input the value:
    3
    the val is 3
    the q size is 3
    now ,please input the value:
    4
    the val is 4
    the q size is 4
    now ,please input the value:
    5
    the val is 5
    the q size is 5
    now ,please input the value:
    6
    the val is 6
    the q size is 6
    now ,please input the value:
    7
    the val is 7
    the q size is 7
    now ,please input the value:
    8
    the val is 8
    the q size is 8
    now ,please input the value:
    9
    the val is 9
    the q size is 9
    now ,please input the value:
    10
    the val is 10
    the q size is 10
    the val is 1
    the val is 2
    the val is 3
    the val is 4
    the val is 5
    the val is 6
    the val is 7
    the val is 8
    the val is 9
    the val is 10


  • 相关阅读:
    you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar(255), sort integer not null
    mysql导出数据到excel的两种方式
    java8 foreach不能使用break、countinue
    学习rabbitmq
    shell脚本基础
    编程基础;程序的执行方式;编程基本概念
    定制vim的工作特性
    使用多个“窗口”
    多文件模式
    可视化模式
  • 原文地址:https://www.cnblogs.com/pangblog/p/3285644.html
Copyright © 2020-2023  润新知