题目简述:
解析:
建立一个结构体即可。里边有可变长度的int数组用来存数据,设置头节点,尾节点,长度length表明队列目前有多少个元素,MaxLen表明队列最大长度。
重点:
(1)注意头指针与尾指针的关系;
(2)注意出队列和入队列时frot和rear的变换要除以MaxLen取余;
代码
#include <iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct Queue{
int *data;
int MaxLen;
int rear;
int frot;
int length;
}Queue;
void Create_Queue(Queue *que,int n)
{
que->data=(int *)malloc(sizeof(int)*n);
que->MaxLen=n;
que->length=0;
que->frot=0;
que->rear=-1;
}
void Qpush(Queue *que,int tmp)
{
que->rear=(que->rear+1)%que->MaxLen;
que->data[que->rear]=tmp;
que->length++;
}
void Qpop(Queue *que)
{
que->frot=(que->frot+1)%que->MaxLen;
que->length--;
}
int Qtop(Queue *que)
{
return que->data[que->frot];
}
int main()
{
int n;
cin>>n;
Queue *que;
que=(Queue *)malloc(sizeof(Queue));
Create_Queue(que,n);
//开始输入数据
for(int i=0;;i++)
{
int tmp;
cin>>tmp;
Qpush(que,tmp);
char ch=getchar();
if(ch=='\n')
break;
}
if(que->length==que->MaxLen)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
//操作队列
int num;
cin>>num;
while(Qtop(que)!=num)
Qpop(que);
Qpop(que);
int frot=Qtop(que);
//输出栈中所有元素
while(que->length>0)
{
cout<<que->data[que->frot]<<" ";
Qpop(que);
}
cout<<endl;
//队头元素
cout<<frot<<endl;
free(que);
return 0;
}
总结
掌握自行实现队列和栈的操作。