#include<iostream>
#include<cstdlib>
#define MAX 100 
using namespace std;

/*
     用数组达成队列,front指向对头,rear指向队尾。早先时 
front等于rear等于0
     进队发出在队尾,然后rear+1;
     出队发出在投机,然后front+1;
    
     front                                   rear  
       a    b  c  d   e   f    g   h  i   j    k
    
     如上所示,若要举办进队操作,插入 l  
     front                                          rear  
       a    b  c  d   e   f    g   h  i   j    k     l
       
     若要出队操作
           front                                          rear  
       a    b     c     d   e   f    g   h  i   j    k     l
    把 a 实行输出,然后将front+1,指向了 b 地点。
    因为是用数组实现,所以不能够对单独对 a
举办自由操作,但我们能够将front+1
    再把该队列忽视掉 a
,那只是人造忽视,但a照旧存在。那样我们就足以队列看出
          front                                          rear  
            b     c     d   e   f    g   h  i   j    k     l
      
    
*/
#include<stdio.h>
#include<stdlib.h>
int input(int *,int len);//入队
void output(int *,int len); //出队

用数组完结循环队列!

[html]
#include <stdio.h> 
#include <stdlib.h> 
 
struct QueueRecord; 
typedef struct QueueRecord *Queue; 
 
#define MinQueueSize (5) 
 
struct QueueRecord 

    int Capacity; 
    int Front; 
    int Rear; 
    int Size; 
    int *Array; 
}; 
 
/* 
 * 创建 队列。 
 */ 
Queue CreateQueue(int capacity) 

    Queue queue; 
    queue = (Queue)malloc(sizeof(Queue)); 
    if (queue == NULL) 
    { 
        printf(“out of space!!!\n”); 
    } 
    queue->Array = (int *)malloc(capacity * sizeof(int)); 
    if (queue->Array == NULL) 
    { 
        printf(“out of space!!!\n”); 
    } 
    queue->Size = 0; 
    queue->Rear = -1; 
    queue->Front = 0; 
     
    return queue; 

 
 
 
/* 
 * if full ,return 0; else return 1; 
 */ 
int IsFull(Queue queue, int capacity) 

    return (queue->Size < capacity); 

 
/* if null return 1. else 0 */ 
int IsEmpty(Queue queue) 

    return (queue->Size == 0); 

 
/* 
 * 打印队列。 
 */ 
int ShowQueue(Queue queue, int capacity) 

    int i; 
     
    printf(“queue->Front = %d\n”, queue->Front); 
    printf(“queue->Rear = %d\n”, queue->Rear); 
    if (!IsEmpty(queue)) 
    { 
        for (i = queue->Front; i <= queue->Rear; i++) 
            { 
                if (i < queue->Rear) 
                { 
                    printf(“%d, “, queue->Array[i]);  
                } 
                else 
                { 
                    printf(“%d “, queue->Array[i]); 
                } 
 
            } 
    } 
    else 
    { 
        printf(“oh, sorry. it is empty.”); 
    } 
 

/* 进队 */ 
void Enqueue(Queue queue, int a, int capacity) 

    queue->Rear++; 
    queue->Array[queue->Rear] = a; 
    queue->Size++; 
 
    if (IsFull(queue, capacity)) 
    { 
        if (queue->Rear == capacity) 
        { 
            queue->Rear = 0; 
        } 
             
    } 
     

 
/* 出队 */ 
void Dequeue(Queue queue, int capacity) 

    queue->Front++; 
    queue->Size–; 
     
    if (IsFull(queue, capacity)) 
    { 
        if (queue->Front== capacity) 
        { 
            queue->Front = 0; 
        } 
             
    } 

 
int main(void) 

    Queue queue; 
    int capacity = 10; 
    if (capacity < MinQueueSize) 
    { 
        printf(“it is too small.\n”); 
    } 
     
    queue = CreateQueue(capacity); 
    Enqueue(queue, 1, capacity); 
    Enqueue(queue, 2, capacity); 
    Enqueue(queue, 3, capacity); 
    Enqueue(queue, 4, capacity); 
    Enqueue(queue, 5, capacity); 
    Enqueue(queue, 6, capacity); 
    Dequeue(queue, capacity); 
    Enqueue(queue, 12, capacity); 
    //Enqueue(queue, 3, capacity); 
    ShowQueue(queue, capacity); 
     

typedef struct Queue
{
int Array[MAX];
int Front;
int Rear;
} *CircleQueue; 

//达成这七个函数
int input(int *p,int len)
{
   //len为数组的长短
   int num=0;//用于吸收接纳多少个数字
   int num2=0;
   //int front=0;//队头
   int rear=0;//队尾
   printf(“请问你要输入多少个数字:\n”);
   scanf(“%d”,&num);
   while(num<0||num>len)
   {
         system(“cls”);
         printf(“你输入的数目不适合,在0-%d内,请重新输入:”,len卡塔尔国;
         scanf(“%d”,&num);
   }
   for(rear;rear<num;rear++)
   {
          system(“cls”);
          printf(“您要输入的数字:”卡塔尔(قطر‎;
          scanf(“%d”,&num2);
          p[rear]=num2;     
   }
   if(rear==num)
   {
          system(“cls”);
       printf(“输入完毕\n”);
       printf(“大器晚成共输入了第%d个数:\n”,rear);    
   }
   return num;
}
void output(int *p,int len)
{
    int front=0;//队头
    int num=1;//用于循环,何况和len相比
    for(num;num<=len;num++)
    {
        //system(“cls”);
        printf(“骑行列的是:%d\n”,p[front]);//出队
        front++;    
    }
}
int main()
{
    int n1=0;//用于收纳input函数的再次来到值
    int data[10];
    n1=input(data,10);
    output(data,n1);
    //delete data;
    //system(“cls”);
    n1=input(data,10);
    output(data,n1);
    return 0;
 }

import java.io.*;  
    public class QueueArray {     
    Object[] a; //对象数组,队列最多存储a.length-1个对象     
    int front;  //队首下标     
    int rear;   //队尾下标     
    public QueueArray(){     
        this(10); //调用其它构造方法     
    }     
    public QueueArray(int size){     
        a = new Object[size];     
        front = 0;     
        rear =0;     
    }     
    /**   
     * 将一个对象追加到队列尾部   
     * @param obj 对象   
     * @return 队列满时返回false,否则返回true   
     */    
    public boolean add(Object obj){     
        if((rear+1)%a.length==front){     
            return false;     
        }     
        a[rear]=obj;     
        rear = (rear+1)%a.length;     
        return true;     
    }     
    /**   
     * 队列头部的第一个对象出队   
     * @return 出队的对象,队列空时返回null   
     */    
    public Object poll(){     
        if(rear==front){     
            return null;     
        }     
        Object obj = a[front];     
        front = (front+1)%a.length;     
        return obj;     
    }     
    public static void main(String[] args) {     
        QueueArray q = new QueueArray(4);     
        System.out.println(q.enqueue("张三"));     
        System.out.println(q.enqueue("李斯"));     
        System.out.println(q.enqueue("赵五"));     
        System.out.println(q.enqueue("王一"));//无法入队列,队列满     
        for(int i=0;i<4;i++){     
            System.out.println(q.dequeue());     
        }     
    }     
}   

摘自 angelbosj的专栏

CircleQueue Create(void卡塔尔国;  //成立贰个队列 
int IsEmpty(CircleQueue Q卡塔尔; //是还是不是为空 
int IsFull(CircleQueue Q卡塔尔(قطر‎;  //是否已满 
void EnQueue(CircleQueue Q,int X); //入列 
void DeQueue(CircleQueue Q);      //出列 
void GetQueueFront(CircleQueue Q卡塔尔国; //获取队头成分 
void GetQueueRear(CircleQueue Q卡塔尔国;  //拿到队尾元素 

] #include stdio.h #include stdlib.h
struct QueueRecord; typedef struct QueueRecord *Queue; #define
MinQueueSize (5) struct QueueRecord { int Capacity; int Front; int Rear;
int…

int main()  //测试 
{
CircleQueue Q=Create();
EnQueue(Q,100);
    DeQueue(Q);
return 0;
}

int IsEmpty(CircleQueue Q)      
{
return (Q->Rear-1卡塔尔==0;  //Q->Rear-1才是最终贰个要素 
}

int IsFull(CircleQueue Q)
{
return (Q->Rear-1-Q->Front卡塔尔国==MAX;  //通过队列个数决断是还是不是为满 
}

void EnQueue(CircleQueue Q,int X)
{
if(IsFull(Q))
   cout <<“队列已满不能够插入 ” <<endl ; 
else
{
if(IsEmpty(Q卡塔尔国State of Qatar  //空队列情状入队 
{
Q->Array[Q->Front]=X;
Q->Array[Q->Rear]=Q->Array[Q->Front];
Q->Rear=(Q->Rear+1卡塔尔国%MAX;//循环意义下的尾指针加1
}
else          //非空入列 
{
Q->Array[Q->Rear]=X;
Q->Rear=(Q->Rear+1卡塔尔%MAX;     //循环意义下的尾指针加1
}
cout <<endl <<Q->Array[Q->Rear-1] <<“入队后”
<<endl ;
GetQueueFront(Q);
        GetQueueRear(Q);

}

void DeQueue(CircleQueue Q)
{
if(IsEmpty(Q))
   cout <<“队列为空不可能出队 ” <<endl ;
else     //非空出列 
{
Q->Front=(Q->Front+1卡塔尔国%MAX;     //循环意义下的头指针加1
}
cout <<endl <<“出队后” <<endl ; 
GetQueueFront(Q);
    GetQueueRear(Q);
}

void GetQueueFront(CircleQueue Q)
{
cout <<“队头为” <<Q->Array[Q->Front] <<endl
;

}

void GetQueueRear(CircleQueue Q)
{
cout <<“队尾为” <<Q->Array[Q->Rear-1] <<endl ;
  //Q->Rear才是队尾的下标 
}

CircleQueue Create(void)
{
int i,a[8]={8,9,11,7,12,15,14,18};
CircleQueue Q;
Q->Front=Q->Rear=0;
for(i=0;i<8;i++)
{
cout <<a[i] <<‘ ‘ ;
}
cout <<endl ;
for(i=0;i<8;i++)
{
if(i==0卡塔尔国      //非空入列 
{
Q->Array[Q->Front]=a[i]; //先给队头赋值 
Q->Array[Q->Rear]=Q->Array[Q->Front];
Q->Rear=(Q->Rear+1卡塔尔国%MAX;       //循环意义下的尾指针加1
}
else    
{
Q->Array[Q->Rear]=a[i];    
Q->Rear=(Q->Rear+1卡塔尔国%MAX;      //循环意义下的尾指针加1
}
}
GetQueueFront(Q);
    GetQueueRear(Q);
return Q;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图