顺序队列及其实现

/*顺序队列及其实现*/
/******************** 队列(顺序存储)************************/
/*             队列(顺序存储)的头文件                      */
/*             文件名:seqqueue.h                           */
/***********************************************************/
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
     datatype a[MAXSIZE];
     int front;
     int rear;
}sequence_queue;
/******************** 队列(顺序存储)初始化************************/
/*        函数功能:队列(顺序存储)初始化                          */
/*        函数参数:指向sequence_queue类型变量的指针变量sq        */
/*        函数返回值:空                                          */
/*        文件名:seqqueue.c,函数名:init()                        */
/*****************************************************************/
void init(sequence_queue *sq)
{
    sq->front=sq->rear=0;
}
/******************** 队列(顺序存储)是否为空************************/
/*        函数功能:判断队列(顺序存储)是否为空                      */
/*        函数参数:sequence_queue类型变量sq                        */
/*        函数返回值:int类型,返回1表示空,0表示非空                 */
/*        文件名:seqqueue.c,函数名:empty()                         */
/*******************************************************************/
int empty(sequence_queue sq)
{
     return (sq.front==sq.rear? 1:0);
}
/******************** 打印队列(顺序存储)************************/
/*        函数功能:打印队列(顺序存储)结点值                    */
/*        函数参数:sequence_queue类型变量sq                    */
/*        函数返回值:空                                        */
/*        文件名:seqqueue.c,函数名:dispaly()                   */
/***************************************************************/
void display(sequence_queue sq)
{
     int i;
     if(empty(sq))
     {
          printf("\n顺序队列是空的!");
     }
     else
     for(i=sq.front;i<sq.rear;i++)
         printf("%5d",sq.a[i]);
}
/******************取得队列(顺序存储)队首结点值********************/
/*        函数功能:取得队列(顺序存储)队首结点值                   */
/*        函数参数:sequence_queue类型变量sq                       */
/*        函数返回值:datatype类型,返回队首结点值                  */
/*        文件名:seqqueue.c,函数名:get()                          */
/******************************************************************/
datatype get(sequence_queue sq)
{
    if(empty(sq))
    {
         printf("\n顺序队列是空的! 无法获得队首结点值!");
         exit(1);
    }
    return sq.a[sq.front];
}
/******************队列(顺序存储)的插入(进队)操作********************/
/*        函数功能:队列(顺序存储)的插入(进队)操作                   */
/*        函数参数:指向sequence_queue类型变量的指针变量sq
                          datatype类型的变量x                       */
/*        函数返回值:空                                             */
/*        文件名:seqqueue.c,函数名:insert()                         */
/********************************************************************/
void insert(sequence_queue *sq,datatype x)
{
     int i;
     if(sq->rear==MAXSIZE)
     {
          printf("\n顺序队列是满的!");
          exit(1);
     }
     sq->a[sq->rear]=x;
     sq->rear++;
}
/******************队列(顺序存储)的删除(出队)操作********************/
/*        函数功能:队列(顺序存储)的删除(出队)操作                   */
/*        函数参数:指向sequence_queue类型变量的指针变量sq
                          datatype类型的变量x                       */
/*        函数返回值:空                                             */
/*        文件名:seqqueue.c,函数名:dele()                           */
/********************************************************************/
void dele(sequence_queue *sq)
{
     if(sq->front==sq->rear)
     {
          printf("\n顺序队列是空的!不能做删除操作!");
          exit(1);
     }
     sq->front++;
}

/*顺序循环队列*/
 
/******************循环队列(顺序存储)的插入操作**********************/
/*        函数功能:队列(顺序存储)的插入操作                         */
/*        函数参数:指向sequence_queue类型变量的指针变量sq
                          datatype类型的变量x                       */
/*        函数返回值:空                                             */
/*        文件名:secqinse.c,函数名:insert_sequence_dqueue()         */
/********************************************************************/
void insert_sequence_cqueue(sequence_queue *sq,datatype x)
{
     if((sq->rear+1)%MAXSIZE==sq->front)
     {
         printf("\n顺序循环队列是满的! 无法进行插入操作!");
         exit(1);
     }
     sq->a[sq->rear]=x;
     sq->rear=(sq->rear+1)%MAXSIZE;
}
/******************循环队列(顺序存储)的删除操作**********************/
/*        函数功能:队列(顺序存储)的删除操作                         */
/*        函数参数:指向sequence_queue类型变量的指针变量sq           */
/*        函数返回值:空                                             */
/*        文件名:secqinse.c,函数名:insert_sequence_dqueue()         */
/********************************************************************/
void dele_sequence_cqueue(sequence_queue *sq)
{
     if((sq->rear+1)%MAXSIZE==sq->front)
     {
         printf("\n顺序循环队列是空的! 无法进行插入操作!");
         exit(1);
     }
      sq->front=(sq->front+1)%MAXSIZE;
}
 

你可能感兴趣的:(数据结构,职场,休闲)