zoukankan      html  css  js  c++  java
  • 使用数组实现队列----《数据结构与算法分析---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


  • 相关阅读:
    VB Open 函数详解 打开、关闭、读、写文件
    VB程序设计中Combobox的取值问题
    vb中typename函数
    VB.NET Event RaiseEvent用处
    通过关键字Event定义用户自己的事件
    [转]如何在注册表中进行查找
    [转]ADT中通过DDMS导入文件出错ddms transfer error: Read-only file system,Failed to push selection: Read-only file system
    [转]在eclipse打开的android虚拟手机,打开File Explorer,下面是空的没有data、mnt、system三个文件
    [转]Android开发过程中遇到的问题
    [转]如何解决android模拟器慢的问题
  • 原文地址:https://www.cnblogs.com/pangblog/p/3285644.html
Copyright © 2011-2022 走看看