2008秋-计算机软件基础-循环顺序队列


/*---------------------------------------------------------
 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,
11);
    ShowAllElements(head1);
    EnterIntoQueue(head1,
22);
    ShowAllElements(head1);
    DeleteFromQueue(head1);
    ShowAllElements(head1);
}




posted @ 2007-09-17 10:24  emanlee  阅读(408)  评论(0编辑  收藏  举报