实现的队列的顺序存储,直接附上代码:
实现功能:
1.初始化
2.输入
3.输出
4.判断队列是不是为空
5.判断队列非满
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define MAXSIZE 1
typedef struct{
int iData[MAXSIZE];
int front, rear;
int num;
}sQueue;
// 初始化
int initQueue(sQueue *(&queue))
{
queue = (sQueue *)malloc(sizeof(sQueue)); //申请空间
if(queue == NULL) return 0; //返回失败
else
{
queue->front = MAXSIZE;
queue->rear = MAXSIZE;
queue->num = 0;
return 1; //返回成功
}
}
int inputQueue(sQueue *(&queue), int x)
{
if(queue->num == MAXSIZE)
{
printf("输入队列已满\n");
system("pause");
return 0;
}
else
{
//队列插入元素
queue->rear = (queue->rear+1)%MAXSIZE;
queue->iData[queue->rear] = x;
queue->num++;
return 1;
}
}
int outputQueue(sQueue *queue, int x)
{
if(queue->num == 0)
{
printf("队空\n");
return 0; //输出失败
}
else
{
queue->front = (queue->front+1)%MAXSIZE;
x = queue->iData[queue->front];
queue->num--;
return 1;//输出成功
}
}
int emptyQueue(sQueue *queue)
{
if(queue->num == 0)
{
printf("队空\n");
return 1;//队空
}
return 0;//队有元素
}
int maxQueue(sQueue *queue)
{
queue->rear = (queue->rear+1)%MAXSIZE;
if(queue->front == queue->rear)
{
printf("队满,插入失败\n");
system("pause");
return 1;
}
queue->rear = (queue->rear-1)%MAXSIZE;
return 0;//队非满
}
函数中使用局部变量不能被赋值,如果要将mian方法中的变量,在外函数中成功赋值,需要的是它的地址,或者是使用引用。
上面的代码只实现的是结果的输出没有实现节点移动,下面给出代码:
typedef struct{
int iData[MAXSIZE];
int front, rear;
int num;
}sQueue;
// 初始化
int initQueue(sQueue *(&queue))
{
queue = (sQueue *)malloc(sizeof(sQueue)); //申请空间
if(queue == NULL) return 0; //返回失败
else
{
queue->front = MAXSIZE;
queue->rear = MAXSIZE;
queue->num = 0;
return 1; //返回成功
}
}
int inputQueue(sQueue *(&queue), int &x)
{
if(queue->num == MAXSIZE)
{
printf("输入队列已满\n");
system("pause");
return 0;
}
else
{
//队列插入元素
queue->rear = (queue->rear+1)%MAXSIZE;
queue->iData[queue->rear] = x;
queue->num++;
return 1;
}
}
int outputQueue(sQueue *(&queue), int &x)
{
if(queue->num == 0)
{
printf("队空\n");
queue->front = MAXSIZE;
queue->rear = MAXSIZE;
return 0; //输出失败
}
else
{
queue->front = (queue->front+1)%MAXSIZE;
x = queue->iData[queue->front];
queue->num--;
return 1;//输出成功
}
}
int emptyQueue(sQueue *queue)
{
if(queue->num == 0)
{
printf("队空\n");
return 1;//队空
}
return 0;//队有元素
}
int maxQueue(sQueue *queue)
{
if(queue->front == (queue->rear+1)%MAXSIZE && queue->front == MAXSIZE)
{
printf("队满,插入失败\n");
system("pause");
return 1;
}
return 0;//队非满
}