2.3 队列--顺序队列
1.main.c```
//
// main.c
// 9_SqeQueue
//
// Created by ls on 2022/5/23.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "SqeQueue.h"
int main() {
SQueue myQueue;
InitQueue(&myQueue);
int select = 1;
ElemType value = 0;
while(select)
{
printf("********************************************\n");
printf("* [1] push_back [2] pop_back *\n");
printf("* [3] show_Stack [4] isEmpty *\n");
printf("* [5] get_top [6] length *\n");
printf("* [7] clear [8] destroy *\n");
printf("********************************************\n");
printf("请选择:> ");
scanf("%d",&select);
if(0 == select) break;
switch (select) {
case 1:
printf("Please input a number(-1 end): ");
while(scanf("%d",&value),value != -1)
{
push_back(&myQueue,value);
}
showQueue(&myQueue);
break;
case 2:
pop_head(&myQueue,&value);
showQueue(&myQueue);
break;
case 3:
showQueue(&myQueue);
break;
case 4:
printf("%ld\n",isEmpty(myQueue));
break;
case 5:
gettop(myQueue);
break;
case 6:
printf("%ld\n",length(myQueue));
break;
case 7:
clear0(&myQueue);
break;
case 8:
destroy(&myQueue);
break;
default:
printf("输入错误!");
break;
}
}
printf("Hello, World!\n");
return 0;
}
2.SqeQueue.h
//
// SqeQueue.h
// 9_SqeQueue
//
// Created by ls on 2022/5/23.
// Copyright © 2022 LSC001. All rights reserved.
//
#ifndef SqeQueue_h
#define SqeQueue_h
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#define MAXQSIZE 5
typedef int ElemType;
typedef struct SQueue
{
ElemType* data;
int front,rear;
}SQueue;
void InitQueue(SQueue *Q);
void push_back(SQueue *Q,ElemType value); // 1
void pop_head(SQueue *Q,ElemType *value); // 2
void showQueue(SQueue *Q); // 3
long isEmpty(SQueue Q); // 4
void gettop(SQueue Q); // 5
long length(SQueue Q); // 6
void clear0(SQueue *Q); // 7
void destroy(SQueue *Q); // 8
#endif /* SqeQueue_h */
3.SqeQueue.c
//
// SqeQueue.c
// 9_SqeQueue
//
// Created by ls on 2022/5/23.
// Copyright © 2022 LSC001. All rights reserved.
// 空: Q->front == Q->rear
// 满:(Q->rear+1)% MAXQSIZE == Q->front
// Length: ( Q->rear- Q->front + MAXQSIZE )% MAXQSIZE
#include "SqeQueue.h"
void InitQueue(SQueue *Q)
{
Q->data = (ElemType*)malloc(MAXQSIZE*sizeof(ElemType));
assert(Q->data != NULL);
Q->front = Q->rear = 0;
}
void push_back(SQueue *Q,ElemType value) // 1
{
if(Q->data && (Q->rear+1)% MAXQSIZE != Q->front)
{
Q->data[Q->rear] = value;
Q->rear = (Q->rear+1)%MAXQSIZE;
}
}
void pop_head(SQueue *Q,ElemType *value) // 2
{
if(Q->data && Q->front != Q->rear)
{
*value = Q->data[Q->front];
Q->front = (Q->front+1)%MAXQSIZE;
}
}
void showQueue(SQueue *Q) // 3
{
if(Q->data && Q->front != Q->rear)
{
ElemType p = Q->front;
while(p != Q->rear)
{
printf("%d ",Q->data[p]);
p =(p+1)%MAXQSIZE;
}
printf("\n");
}
}
long isEmpty(SQueue Q) // 4
{
if(Q.data)
{
if(Q.front == Q.rear)
{return 1;}
else
{return 0;}
}else
{ return -100000;}
}
void gettop(SQueue Q) // 5
{
if(!Q.data || Q.front == Q.rear) return;
printf("%d\n",Q.data[Q.front]);
}
long length(SQueue Q) // 6
{
if(Q.data && Q.front != Q.rear)
{return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}
else
{return -100000;}
}
void clear0(SQueue *Q) // 7
{
if(Q->data)
{
Q->front = Q->rear= 0;
}
}
void destroy(SQueue *Q) // 8
{
free(Q->data);
Q->data=NULL;
}