C语言版:
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct Queue
{
int Max;
int f,r;
DataType *elem;
};
typedef struct Queue *SeqQueue; // 加typedef使其另起别名
SeqQueue SetNullQueue_Seq(int m)
{
SeqQueue squeue;
squeue = (SeqQueue)malloc(sizeof(struct Queue));
if(squeue == NULL)
{
printf("Alloc failure!\n");
return NULL;
}
else
{
squeue ->elem = (int *)malloc(sizeof(DataType) * m);
if(squeue ->elem != NULL) // 分配好内存此时指针就不为空
{
squeue ->Max = m;
squeue ->f = 0;
squeue ->r = 0;
return squeue;
}
}
}
int IsNullQueue_seq(SeqQueue squeue)
{
return(squeue ->f == squeue ->r);
}
void EnQueue_seq(SeqQueue squeue, DataType x)
{
if((squeue ->r + 1) % squeue -> Max == squeue ->f) // 判断队满
{
printf("It is FULL Queue!");
}
else
{
squeue ->elem[squeue ->r] = x;
squeue ->r = (squeue ->r + 1) % (squeue ->Max); // 循环队列的写法
}
}
void DeQueue_seq(SeqQueue squeue)
{
if(IsNullQueue_seq(squeue))
{
printf("It is empty queue!\n");
}
else
{
squeue ->f = (squeue ->f + 1) % (squeue ->Max);
}
}
DataType FrontQueue_seq(SeqQueue squeue)
{
if(IsNullQueue_seq) // 判空
{
printf("It is empty queue!");
}
else
{
return(squeue ->elem[squeue ->f]);
}
}
int main()
{
SetNullQueue_Seq(int m); // 建立空队列
IsNullQueue_seq(SeqQueue squeue); // 判空
EnQueue_seq(SeqQueue squeue, DataType x); // 入队
DeQueue_seq(SeqQueue squeue); // 出队
FrontQueue_seq(SeqQueue squeue); // 取队头
return 0;
}
/*
注:这里的顺序队列实际上是指循环队列,因为一般的循环队列会导致假溢出的情况发生,
使内存不能完全使用,造成空间的浪费
*/