源码
#include
#include
#include
#define MaxSize 100
typedef int ElemType;
typedef struct {
ElemType *base;
int front;
int rear;
}SqQueue;
bool InitQueue(SqQueue *Q) {
Q->base = (ElemType *) malloc(sizeof(ElemType));
Q->front = Q->rear;
return true;
}
bool EnQueue(SqQueue *Q, ElemType e) {
if ((Q->rear + 1) % MaxSize == Q->front) return false;
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MaxSize;
return true;
}
bool DeQueue(SqQueue *Q, ElemType *e) {
if (Q->front == Q->rear) return false;
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MaxSize;
return true;
}
bool GetTop(SqQueue *Q, ElemType *e) {
if (Q->front == Q->rear) return false;
*e = Q->base[Q->front];
return true;
}
int QueueLength(SqQueue *Q) {
return (Q->rear - Q->front + MaxSize) % MaxSize;
}
void PrintQueue(SqQueue *Q) {
int p = Q->front;
while (p != Q->rear) {
printf("%dn", Q->base[p]);
p = (p + 1) % MaxSize;
}
}
int main() {
SqQueue *Q;
SqQueue q;
Q = &q;
InitQueue(Q);
ElemType e;
int chooseNumber;
bool ans;
while (1) {
printf("******************************n");
printf("请操作:n");
printf("1.入队n");
printf("2.出队n");
printf("3.取队头元素n");
printf("4.获取队列长度n");
printf("5.输出队列n");
printf("0(exit):退出程序n");
printf("******************************n");
scanf("%d", &chooseNumber);
switch (chooseNumber) {
case 0:
exit(0);
break;
case 1:
printf("请输入入队元素:n");
scanf("%d", &e);
ans = EnQueue(Q, e);
if (ans) printf("入队成功!n");
else printf("入队失败!n");
break;
case 2:
ans = DeQueue(Q, &e);
if (ans) printf("出队成功!出队元素为%dn", e);
else printf("出队失败!n");
break;
case 3:
ans = GetTop(Q, &e);
if (ans) printf("队头元素为%dn", e);
else printf("队列为空!n");
break;
case 4:
printf("当前队列长度为%dn", QueueLength(Q));
break;
case 5:
PrintQueue(Q);
break;
default:
printf("输入错误,请重新输入:n");
break;
}
}
return 0;
}