3.2.2队列的顺序实现

// DataStructTest.cpp : Defines the entry point for the console application.
//

#include 
"stdafx.h"
#include 
<iostream.h>
#include 
<malloc.h>

int const maxsize=20;
typedef 
struct cycqueue
{
    
int data[maxsize];
    
int front;
    
int rear;
}
CycqueueTP;
//初始化队列,队列结构为保留一个结点作为标志,即front所在的点为标志点,不存储内容
void InitCycQueue(CycqueueTP & sq)
{
    sq.front
=0;
    sq.rear
=0;
}

//入队,需要使用模除,用以实现循环
int EnCycQueue(CycqueueTP & sq,int value)
{
    
if ((sq.rear+1)%maxsize==sq.front)
    
{
        
//溢出
        return 0;
    }

    sq.rear
=(sq.rear+1)%maxsize;
    sq.data[sq.rear]
=value;
    
return 1;
}

//出队
int OutCycQueue(CycqueueTP & sq,int & value)
{
    
if (sq.front==sq.rear)
        
return 0;        //空队列
    sq.front=(sq.front+1)%maxsize;
    value
=sq.data[sq.front];
    
return 1;
}

//判断是否为空队列
int EmptyCycQueue(CycqueueTP & sq)
{
    
if (sq.front==sq.rear)
        
return 1;
    
else
        
return 0;
}

//取队头结点
int GetHead(CycqueueTP & sq,int & value)
{
    
if (sq.front==sq.rear)
        
return 0;        //空队列
    value=sq.data[(sq.front+1)%maxsize];
    
return 1;
}

//显示
void Display(CycqueueTP & sq)
{
    
int k=1;
    
if (sq.front<sq.rear)
    
{
        
for(int i=sq.front;i<sq.rear;i++)
        
{
            cout
<<""<<k++<<"结点的值为:"<<sq.data[i+1]<<endl;
        }

    }

    
else
    
{
        
for(int i=sq.front;i<maxsize-1;i++)
        
{
            cout
<<""<<k++<<"结点的值为:"<<sq.data[i+1]<<endl;
        }

        
for(int j=0;j<=sq.rear;j++)
        
{
            cout
<<""<<k++<<"结点的值为:"<<sq.data[j]<<endl;
        }

    }

}

int main(int argc, char* argv[])
{
    CycqueueTP sq;
    InitCycQueue(sq);
    
//入队
    for(int i=1;i<20;i++)
    
{
        EnCycQueue(sq,i);
    }

    Display(sq);
    
//出队
    int value=0;
    OutCycQueue(sq,value);
    cout
<<"出队的结点值为:"<<value<<endl;
    Display(sq);
    
//
    EnCycQueue(sq,500);
    cout
<<endl;
    Display(sq);
    
return 0;
}

posted @ 2007-06-25 15:32  吴东雷  阅读(271)  评论(0编辑  收藏  举报