使用数组实现队列----《数据结构与算法分析---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\n");
exit(-2);
    }


    q = (queue)malloc(sizeof(struct QueRecord));
    if(q == NULL)
    {
printf("can't alloca memory\n");
        exit(-1);
    }




    q->array = (element_type *)malloc(max_element * sizeof(element_type));
    if(q->array == NULL)
    {
printf("can't alloca the mem\n");
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\n");
exit(-2);
    }


    if(IsFull(q))
    {
printf("the que is full\n");
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\n");
exit(-3);
    }

    return q->array[q->front];
}


void dequeue(queue q)
{
    if(IsEmpty(q))
    {
printf("the que is empty\n");
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:\n");
scanf("%d",&val);
printf("the val is %d\n",val);
enqueue(val,q);
printf("the q size is %d\n",q->size);
    } 


    while(q->size)
    {
val = front_deque(q);
printf("the val is %d\n",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


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值