2008秋季-计算机软件基础-0922课堂用例(1)

 

 

 

/* ---------------------------------------------------------
 Title: Sequence Queue(顺序队列)顺序队列-顺序存储结构的队列 
  请先阅读教材74-76页, 2.4.1-2.4.3节, 队列的定义及基本运算
 (注意:以下程序为简化后的,仅供入门学习之用)
----------------------------------------------------------
*/
#include
< stdio.h >
#include
< stdlib.h >
// 定义队列的结构
struct  queue
{
   
int  q[ 4 ]; // 存放数据元素
    int  front; // 指针,指向队头
    int  rear; // 指针,指向队尾后一个位置
};

// 初始化队列
struct  queue  *  InitialQueue()
{
 
struct  queue  *  head;
 head
= ( struct  queue  * )malloc( sizeof ( struct  queue ));
 head
-> front = 0 ;
 head
-> rear = 0 ;
 
return  head;
}

// 入队列
void  EnterIntoQueue( struct  queue  *  head,  int  value)
{
    
if (head -> front ==  (head -> rear + 1 ) % 4 )
    {
        printf(
" Queue is full. Enter failed.\n " );
        
return ;
    }
    head
-> q[head -> rear] = value;
    head
-> rear = (head -> rear + 1 ) % 4 ;
 }

// 出队列
void  DeleteFromQueue( struct  queue  *  head)
{
 
if (head -> front == head -> rear)
 {
     printf(
" Queue is empty, Delete failed\n " );
 }
 
else
    {
        head
-> front = (head -> front + 1 ) % 4 ;
    }
}

// 显示队列中所有元素
void  ShowAllElements( struct  queue  *  head)
{
 
int  i;
 printf(
"  \nShow all elements.\n " );
 
if (head -> front < head -> rear)
 {
   
for (i = head -> front;i < head -> rear;i ++ )
     printf(
"  %d  " ,head -> q[i]);
 }
if (head -> front > head -> rear)
 {
   
for (i = head -> front;i < 4 ;i ++ )
     printf(
"  %d  " ,head -> q[i]);
   
for (i = 0 ;i < head -> rear;i ++ )
     printf(
"  %d  " ,head -> q[i]);
 }
}

void  main()
{
    
struct  queue  *  head1;
    head1
= InitialQueue();
    ShowAllElements(head1);
    EnterIntoQueue(head1,
1 );
    EnterIntoQueue(head1,
2 );
    EnterIntoQueue(head1,
3 );
    DeleteFromQueue(head1);
    EnterIntoQueue(head1,
4 );
//   
        ShowAllElements(head1);

}

 

 

你可能感兴趣的:(2008)