循环队列的结构
typedef struct
{
int front;
int rear;
int * base;
} Queue;
初始化
void Initqueue ( Queue * q)
{
q-> base= ( int * ) malloc ( sizeof ( int ) * Initsize) ;
q-> front= q-> rear= 0 ;
}
入队
void push ( Queue * q, int x)
{
if ( ( q-> rear+ 1 ) % Initsize== q-> front )
{
printf ( "队列已满" ) ;
return ;
}
q-> base[ q-> rear] = x;
q-> rear= ( q-> rear+ 1 ) % Initsize;
}
出队
void pop ( Queue * q, int * x)
{
if ( q-> rear== q-> front)
{
printf ( "队列为空" ) ;
return ;
}
* x= q-> base[ q-> front] ;
q-> front = ( q-> front + 1 ) % Initsize;
}
取队头元素
int gettop ( Queue * q)
{
return q-> base[ q-> front] ;
}
判断队列是否为空
bool empty ( Queue * q)
{
if ( q-> rear== q-> front)
{
return true;
}
return false;
}
全部代码
# include <stdio.h>
# include <stdlib.h>
# define Initsize 20
typedef struct
{
int front;
int rear;
int * base;
} Queue;
void Initqueue ( Queue * q)
{
q-> base= ( int * ) malloc ( sizeof ( int ) * Initsize) ;
q-> front= q-> rear= 0 ;
}
void push ( Queue * q, int x)
{
if ( ( q-> rear+ 1 ) % Initsize== q-> front )
{
printf ( "队列已满" ) ;
return ;
}
q-> base[ q-> rear] = x;
q-> rear= ( q-> rear+ 1 ) % Initsize;
}
void pop ( Queue * q, int * x)
{
if ( q-> rear== q-> front)
{
printf ( "队列为空" ) ;
return ;
}
* x= q-> base[ q-> front] ;
q-> front = ( q-> front + 1 ) % Initsize;
}
int gettop ( Queue * q)
{
return q-> base[ q-> front] ;
}
bool empty ( Queue * q)
{
if ( q-> rear== q-> front)
{
return true;
}
return false;
}
int main ( )
{
Queue q;
Initqueue ( & q) ;
push ( & q, 1 ) ;
push ( & q, 2 ) ;
push ( & q, 3 ) ;
int a;
pop ( & q, & a) ;
printf ( "%d\n" , a) ;
printf ( "队头元素%d" , gettop ( & q) ) ;
return 0 ;
}
链队列的结构
typedef struct Qnode
{
int date;
struct Qnode * next;
} Queue;
typedef struct
{
Queue* front;
Queue* rear;
} Linkqueue;
初始化
void Initqueue ( Linkqueue * q)
{
q-> front= q-> rear= ( Queue* ) malloc ( sizeof ( Queue) ) ;
q-> front-> next = NULL ;
}
入队
void push ( Linkqueue * q, int e)
{
Queue* t= ( Queue * ) malloc ( sizeof ( Queue) ) ;
t-> date = e;
t-> next = NULL ;
q-> rear-> next = t;
q-> rear = t;
}
出队
void pop ( Linkqueue * q, int * e)
{
if ( q-> rear== q-> front )
{
printf ( "队列为空" ) ;
return ;
}
Queue * p= q-> front-> next ;
* e= p-> date ;
q-> front-> next = p-> next ;
if ( p== q-> rear )
{
q-> rear= q-> front ;
}
free ( p) ;
}
取队头元素
int gettop ( Linkqueue * q)
{
if ( q-> front == q-> rear )
{
printf ( "队列为空" ) ;
exit ( 0 ) ;
}
return q-> front-> next-> date;
}
判断队列是否为空
bool empty ( Linkqueue * q)
{
if ( q-> front == q-> rear )
return true;
return false;
}
销毁链队列
void Destroy ( Linkqueue * q)
{
while ( q-> front)
{
Queue * p= q-> front ;
q-> front = q-> front-> next ;
free ( p) ;
}
}