能输出队头元素的值,但是删不掉队头元素
好奇为什么 orz求大神帮帮忙
代码如下
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
void init(SqQueue *Q)
{
Q->base=(int *)malloc(MAXSIZE*sizeof(int));
if(Q->base==0)
exit(1);
Q->front=Q->rear=0;
}
void create(SqQueue *Q)
{
int i;
for(i=1;i<=20;i++)
{
Q->base[i]=i;
Q->rear=(Q->rear+1)%MAXSIZE;
}
Q->front=Q->base[1];//让头指针指向队列的第一个元素
if((Q->rear+1)%MAXSIZE==Q->front)
printf("error");
}
void input(SqQueue *Q,int e)
{
int i;
if(Q->front==(Q->rear+1)%MAXSIZE)
printf("队满溢出");
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
for(i=1;i<MAXSIZE;i++)
{
printf("%d\n",Q->base[i]);
}
}
void output(SqQueue *Q,int *e)
{
int i;
if(Q->front==Q->rear)
printf("队空");
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXSIZE;//这行代码加不加输出结果毫无区别。。。
for(i=1;i<MAXSIZE;i++)
{
printf("%d\n",Q->base[i]);
}
}
int main()
{
SqQueue *Q;
int e;
scanf("%d",&e);
init(Q);
create(Q);
input(Q,e);
output(Q,&e);
printf("%d",e);
printf("Hello world!\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
void init(SqQueue *Q)
{
Q->base = (int *)malloc(MAXSIZE * sizeof(int));
if (Q->base == 0)
exit(1);
Q->front = Q->rear = 0;
}
void create(SqQueue *Q) //这个函数相当于20个input输入0-19这二十个数,没必要写这个函数,可以直接在main函数中用input出处理
{
int i;
for (i = 0; i < 20; i++) //这里直接从0开始,如果你非要从1,请在init函数中把front和rear初始化为1
{
Q->base[i] = i;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
//Q->front = 1; //front是用来存起始下标的,直接在init中初始化,不用再这里修改,因为一开始front和rear是有联系的
if ((Q->rear + 1) % MAXSIZE == Q->front)
printf("error");
}
void input(SqQueue *Q, int e)
{
int i;
if (Q->front == (Q->rear + 1) % MAXSIZE)
printf("队满溢出");
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
int len(SqQueue *Q)
{
return ((Q->rear - Q->front + MAXSIZE) % MAXSIZE);
}
void show(SqQueue *Q) //展示队列单独写一个函数
{
for (int i = Q->front; i != Q->rear; i = (i + 1) % MAXSIZE) {
printf("%d ", Q->base[i]);
}
printf("\n");
}
void output(SqQueue *Q, int *e, int L) //L参数没用
{
int i;
if (Q->front == Q->rear)
printf("队空");
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXSIZE; //这里已经删除了对头元素
/*for (i = 1; i<L - 1; i++)
{
printf("%d\n", Q->front);
Q->front++;//改了的地方是这里,我让头指针++以后就删去了队头 元素 //你这里把队列过了一遍
}*/
}
void emp(SqQueue *Q)
{
if (Q->front == Q->rear)
printf("队空");
else
printf("非空");
}
int main()
{
SqQueue Q; //这里直接创建结构体,而不是指针,谨记“指针是用来存地址的”,创建指针一开始是没有分配空间的,除非你手动给它分配
int e, L;
scanf("%d", &e);
init(&Q);
create(&Q);
show(&Q);
input(&Q, e);
show(&Q);
L = len(&Q);
printf("queue`s length is :%d\n", L);
output(&Q, &e, L);
show(&Q);
printf("Pop :%d\n", e);
emp(&Q);
printf("Hello world!\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
void init(SqQueue *Q)
{
Q->base=(int *)malloc(MAXSIZE*sizeof(int));
if(Q->base==0)
exit(1);
Q->front=Q->rear=0;
}
void create(SqQueue *Q)
{
int i;
for(i=1;i<=20;i++)
{
Q->base[i]=i;
Q->rear=(Q->rear+1)%MAXSIZE;
}
Q->front=Q->base[1];
if((Q->rear+1)%MAXSIZE==Q->front)
printf("error");
}
void input(SqQueue *Q,int e)
{
int i;
if(Q->front==(Q->rear+1)%MAXSIZE)
printf("队满溢出");
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
for(i=1;i<MAXSIZE;i++)
{
printf("%d\n",Q->base[i]);
}
}
int len(SqQueue *Q)
{
return ((Q->rear-Q->front+MAXSIZE)%MAXSIZE);
}
void output(SqQueue *Q,int *e,int L)
{
int i;
if(Q->front==Q->rear)
printf("队空");
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
for(i=1;i<L-1;i++)
{
printf("%d\n",Q->front);
Q->front++;//改了的地方是这里,我让头指针++以后就删去了队头 元素
}
}
void emp(SqQueue *Q)
{
if(Q->front==Q->rear)
printf("队空");
else
printf("非空");
}
int main()
{
SqQueue *Q;
int e,L;
scanf("%d",&e);
init(Q);
create(Q);
input(Q,e);
L=len(Q);
printf("%d\n",L);
output(Q,&e,L);
printf("%d\n",e);
emp(Q);
printf("Hello world!\n");
return 0;
}