顺序队列的基本操作

四、实验内容

编写程序,实现顺序队列的创建、入队和出队等基本操作算法。

(1) 创建包含任意个元素的顺序队列。

(2) 入队一个任意元素。

(3) 取队首元素并输出。

(4) 出队一个任意元素。

*(5) 删除队列中值为给定值的元素。

*(6) 利用顺序栈实现顺序对列元素的逆置

  #include

    #include

    #include

#define ok 1

typedef int ElemType;//这个分号假如没有就是错误

typedef struct

{

      ElemType  *base;

  ElemType  front;

      ElemType  rear;

}SqQueue;

SqQueue InitQueue(int);

    int insert(SqQueue,int max,int);

    SqQueue insert1(SqQueue,int,int);

    SqQueue push(SqQueue);

    SqQueue deletely(SqQueue,int);

int main()

{

int n;

SqQueue  q;

    int max;

    int m;

printf("请输入你想要创建队列长度的最大值");

    scanf("%d",&max);

q=InitQueue(max);

printf("请输入要入队的任意元素");

scanf("%d",&n);

insert(q,n,max);

printf("\n随机输入一个数生成一些随机数给队列赋值");

    scanf("%d",&m);

SqQueue p=insert1(q,max,m);

    p=push(p);

    deletely(p,max);

}

SqQueue InitQueue(int max)

{

    SqQueue  Q;

Q.base=new int[max];

    if(!Q.base)

    exit(-1);//分配空间失败

Q.front=Q.rear=0;//头尾指针置零,此时队列为空

    return Q;

}

int insert(SqQueue  q,int n,int max)

{

     if((q.rear+1)%max==q.front)//表示队满

     printf("队列已满");

     q.base[q.rear]=n;

 q.rear=q.rear++;//队尾指针加1

 printf("\n");

 printf("入队列的任意一个元素是");

 printf("%d",q.base[q.front]);

 return ok;

}

SqQueue insert1(SqQueue q,int max,int m)

{

     int n;

     srand((int)time(NULL));//为什么把这一句放进for语句中,就只有一个值。

     printf("\n");

     for(int i=1;i<=5;i++)

     {

      n=rand()%m+1;

     if((q.rear+1)%max==q.front)//表示队满

     printf("队列已满");

     q.base[q.rear++]=n;

     }

     printf("\n");

 printf("输出队列中的所有元素:");

     for(int i=1;i<=5;i++)

 printf("%d\n",q.base[q.front++]);

 printf("\n");

 printf("队列的首元素是:");

 for(int i=1;i<=5;i++)

 --q.front;

 printf("%d",q.base[q.front]);

 return q;

}

 SqQueue push(SqQueue p)

 {

     int v=0;

     int m=0;

     printf("\n队列用数组储存是以数字%d开始的",p.front);

     while(p.front!=p.rear--)

     m++;

     int a[m];

     srand((int)time(NULL));

     int t=rand()%m;

     printf("\n");

    printf("输出队列的第%d个元素\n",t+1);

    printf("出队的任意元素为");

 

    for(int i=0;i

    {

    a[i]=p.base[i];

     p.front++;

    }

 

    printf("%d\n",p.base[p.front]);

 

 

 

    for(int j=t-1;j>=0;j--)

     p.base[p.front--]=a[j];

 

     printf("\n出队成功\n");

     for(int k=1;k<=m;k++)

     ++p.rear;

     printf("出队列后的剩下元素是\n");

     while(p.front!=p.rear)

     {

     ++p.front;

     printf("%d\n",p.base[p.front]);

     ++v;

     }

     for(int k1=1;k1

     --p.front;

     printf("队列尾指针指向的最后一个数组元素的下表为");

     printf("%d\n",p.rear);

     return p;

 }

  SqQueue deletely(SqQueue t,int max)//这里还有问题有待修改

  {

   int a;

   int j=0;

   int b[max];

   printf("\n请输入你想要删除的元素值");

   scanf("%d",&a);

 

    while(t.base[t.front]!=a)

    b[j++]=t.base[t.front++];

    printf("删除元素为");

    printf("%d",t.base[t.front]);

    for(int k=t.front-1;k>=0;k--)

    t.base[t.front--]=b[k];

    ++t.front;

 

 

    printf("\n删除成功\n");

    printf("删除后的剩余元素是\n");

 

    while(t.front!=t.rear)

    {

     ++t.front;

    printf("%d\n",t.base[t.front]);

    }

  }

 


你可能感兴趣的:(数据结构)