一个双向队列是限定在两端end1,end2都可以进行插入删除操作的线性表。对空调间是end1=end2.若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出指定端(i=1,2)进行插入和删除操作
#include<iostream.h>
#include<malloc.h>
#define MaxLen 6
typedef char elemtype;
typedef struct node
{
elemtype data[MaxLen];
int end1,end2;
}squeue;
void init(squeue *sq)
{
sq->end1=0;
sq->end2=0;
}
squeue *add(squeue *sq,char x,int tag)
{
switch(tag)
{
case 1:
if((sq->end1-1)%MaxLen!=sq->end2)
{
sq->end1=(sq->end1-1+MaxLen)%MaxLen;
sq->data[sq->end1]=x;
return sq;
}
else
return sq;
case 2:
if((sq->end2+1)%MaxLen!=sq->end1)
{
sq->data[sq->end2]=x;
sq->end2=sq->end2+1;
return sq;
}
else
return sq;
}
}
void print(squeue *sq)
{
if(sq->end2==sq->end1)
{
cout<<"队列为空"<<endl;
return;
}
else if(sq->end2>sq->end1)
{
for(int i=sq->end1;i<sq->end2;i++)
cout<<(int)sq->data[i]<<" ";
cout<<endl;
}
else if(sq->end2<sq->end1)
{
for(int i=sq->end1;(i+MaxLen)%MaxLen!=sq->end2;i++)
cout<<(int)sq->data[i%MaxLen]<<" ";
cout<<endl;
}
}
void main()
{
elemtype p;
squeue *sq=(squeue *)malloc(100*sizeof(squeue));
init(sq);
sq=add(sq,45,2);
print(sq);
sq=add(sq,55,2);
print(sq);
}