四、实验内容
编写程序,实现顺序队列的创建、入队和出队等基本操作算法。
(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]); } }