C语言队列的插入与删除
#include<stdio.h>#include<stdlib.h>#defineMAXQSIZE100//最大队列长度#defineOK1#defineERROR0#...
#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100 //最大队列长度
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct
{
int *base;
int front;
int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
void InitQueue(SqQueue *Q)
{
Q->front=Q->rear=0;
}
int QueueLength(SqQueue *Q)
{
return (Q->rear-Q->front + MAXQSIZE)% MAXQSIZE;
}
void display(SqQueue *Q)
{
int i;
for(i=Q->front;i<Q->rear;i++)
printf("%3d",Q->base[i]);
printf("\n");
}
int InQueue(SqQueue *Q,int e)
{
if((Q->rear +1) % MAXQSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q, int m)
{
int i=0 ;
if(Q->front==Q->rear)
return ERROR;
while(i!=m && Q->front!=Q->rear)
{
printf("\n%dDeleted\n",Q->base[Q->front]);
Q->front=(Q->front+1)%MAXQSIZE;
i++;
}
if(i!=m)
printf("\n ERROR ");
}
void main()
{
int m,n,d,i;
SqQueue Q;
InitQueue(&Q);
printf("请输入要插入的元素个数:");
scanf("%d",&m);
printf("要插入的元素:");
for(i=1;i<=m;i++)
{
scanf("%d",&n);
InQueue(&Q,n);
}
printf("插入元素后,队列中的元素为:");
display(&Q);
printf("队列长度为:");
printf("%d\n",QueueLength(&Q));
printf("输入要删除的元素个数:");
scanf("%d",&d);
DeQueue(&Q,d);
printf("\n删除元素后,队列中元素为:");
display(&Q);
printf("\n");
}
写完后没错误,可是运行到这里就不行了,求教
还有没有大神啊?楼下的方法不行啊 展开
#include <stdlib.h>
#define MAXQSIZE 100 //最大队列长度
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct
{
int *base;
int front;
int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
void InitQueue(SqQueue *Q)
{
Q->front=Q->rear=0;
}
int QueueLength(SqQueue *Q)
{
return (Q->rear-Q->front + MAXQSIZE)% MAXQSIZE;
}
void display(SqQueue *Q)
{
int i;
for(i=Q->front;i<Q->rear;i++)
printf("%3d",Q->base[i]);
printf("\n");
}
int InQueue(SqQueue *Q,int e)
{
if((Q->rear +1) % MAXQSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q, int m)
{
int i=0 ;
if(Q->front==Q->rear)
return ERROR;
while(i!=m && Q->front!=Q->rear)
{
printf("\n%dDeleted\n",Q->base[Q->front]);
Q->front=(Q->front+1)%MAXQSIZE;
i++;
}
if(i!=m)
printf("\n ERROR ");
}
void main()
{
int m,n,d,i;
SqQueue Q;
InitQueue(&Q);
printf("请输入要插入的元素个数:");
scanf("%d",&m);
printf("要插入的元素:");
for(i=1;i<=m;i++)
{
scanf("%d",&n);
InQueue(&Q,n);
}
printf("插入元素后,队列中的元素为:");
display(&Q);
printf("队列长度为:");
printf("%d\n",QueueLength(&Q));
printf("输入要删除的元素个数:");
scanf("%d",&d);
DeQueue(&Q,d);
printf("\n删除元素后,队列中元素为:");
display(&Q);
printf("\n");
}
写完后没错误,可是运行到这里就不行了,求教
还有没有大神啊?楼下的方法不行啊 展开
3个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100 //最大队列长度
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct
{
int *base;
int front;
int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
void InitQueue(SqQueue *Q)
{
Q->front = Q->rear = 0;
if (Q->base == NULL) {
Q->base = (int*)malloc(sizeof(int)* MAXQSIZE);
}
}
void DesQueue(SqQueue *Q) {
free(Q->base);
Q->base = NULL;
Q->front = Q->rear = 0;
}
int QueueLength(SqQueue *Q)
{
if (Q->base == NULL) return ERROR;
return (Q->rear - Q->front + MAXQSIZE) % MAXQSIZE;
}
void display(SqQueue *Q)
{
int i;
if (Q->base == NULL) {
printf("\n ERROR ");
return;
}
for (i = Q->front; i != Q->rear; i++) {
i = i % MAXQSIZE;
printf("%3d", Q->base[i]);
}
printf("\n");
}
int InQueue(SqQueue *Q, int e)
{
if (Q->base == NULL) return ERROR;
if ((Q->rear + 1) % MAXQSIZE == Q->front)
return OVERFLOW;
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q, int m)
{
int i = 0;
if (Q->base == NULL) return ERROR;
if (Q->front == Q->rear)
return ERROR;
while (i != m && Q->front != Q->rear)
{
printf("\n%dDeleted\n", Q->base[Q->front]);
Q->front = (Q->front + 1) % MAXQSIZE;
i++;
}
if (i != m) {
printf("\n ERROR ");
return ERROR;
}
return OK;
}
void main()
{
int m, n, d, i;
SqQueue Q = { 0, 0, 0 };
InitQueue(&Q);
printf("请输入要插入的元素个数:");
scanf("%d", &m);
printf("要插入的元素:");
for (i = 1; i <= m; i++)
{
scanf("%d", &n);
InQueue(&Q, n);
}
printf("插入元素后,队列中的元素为:");
display(&Q);
printf("队列长度为:");
printf("%d\n", QueueLength(&Q));
printf("输入要删除的元素个数:");
scanf("%d", &d);
DeQueue(&Q, d);
printf("\n删除元素后,队列中元素为:");
display(&Q);
printf("\n");
DesQueue(&Q);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询