目录
前言
一、栈
1.栈的概念
2.栈的表示和实现
1.定义
2.初始化
3.销毁
4.清空
5.栈空
6.栈的长度
7.获取栈顶元素
8.入栈
9.出栈
10.遍历
11.完整代码
二、队列
1.队列的概念
2.队列的链式表示和实现
1.定义
2.初始化
3.销毁
4.清空
5.空队列
6.队列长度
7.获取队头
8.入队
9.出队
10.遍历队列
11.完整代码
3.队列的顺序表示和实现
1.定义
2.初始化
3.销毁
4.清空
5.空队列
6.队列长度
7.获取队头
8.入队
9.出队
10.遍历队列
11.完整代码
4.循环队列的顺序表示和实现
1.定义
2.初始化
3.销毁
4.清空
5.空队列
6.队列长度
7.获取队头
8.入队
9.出队
10.遍历队列
11.完整代码
前言
本篇博客介绍栈和队列的表示和实现。
一、栈
1.栈的概念
栈是限定仅在表尾进行插入和删除的线性表。表尾称为栈顶,表头称为栈底。不含元素的栈称为空栈。
栈是一种具有特定操作的数据结构,它按照"先进后出"的原则存储和访问数据。栈具有两个基本操作,分别为入栈(push)和出栈(pop)。入栈将元素放入栈的顶部,出栈则将栈顶的元素取出。栈在计算机科学中广泛应用,例如函数调用、表达式求值、递归算法等。
2.栈的表示和实现
1.定义
我们一般使用顺序表来表示栈。使用一段连续的存储空间存储栈中的元素。
#define STACK_INIT_SIZE 100 // 存储空间初始分配量
#define STACKINCREMENT 10 // 存储空间分配增量
#define Status int
#define ElementType inttypedef struct{ElementType * base;// 栈底指针ElementType * top; // 栈顶指针int stacksize; // 栈的当前可以使用的最大容量
}SeqStack;
2.初始化
栈初始化的时候,给栈的基址分配存储空间,初始化之后,栈顶和栈底相同。
栈的基本操作
Status initStack(SeqStack *seqStack){seqStack->base = (ElementType *)malloc(sizeof(ElementType) * STACK_INIT_SIZE);if (!seqStack->base) {return 0;}seqStack->top = seqStack->base;seqStack->stacksize = STACK_INIT_SIZE;return 1;
}
3.销毁
入栈的时候,我们首先判断下顺序栈是否已满,如果栈满则需要追加存储空间。然后入栈,栈顶指针上移。
//如果栈存在 销毁栈
void destroyStack(SeqStack *seqtack){free(seqtack->base);//释放栈基址的存储空间seqtack->base = seqtack->top = NULL;//栈顶和栈底置空seqtack->stacksize = 0;//栈大小置零
}
4.清空
出栈的时候,首先判断栈是否为空,然后取出栈顶元素。
void clearStack(SeqStack * seqStack){seqStack->top = seqStack->base;
}
5.栈空
判断栈空,比较栈顶和栈底是否相同。
//栈空
Status seqStackEmpty(SeqStack *seqStack){return seqStack->top == seqStack->base;
}
6.栈的长度
比较栈顶和栈顶的指针
//栈的长度
int seqStackLength(SeqStack * seqStack){return seqStack->top - seqStack->base;
}
7.获取栈顶元素
入栈的时候,我们首先判断下顺序栈是否已满,如果栈满则需要追加存储空间。然后入栈,栈顶指针上移。
// 获取栈顶元素
Status getSeqStackTop(SeqStack * seqStack,int *element){if (seqStack->top == seqStack->base) {return 0;}*element = *seqStack->top;return 1;
}
8.入栈
//入栈
Status push(SeqStack *seqStack,ElementType element){if (seqStack->top -seqStack->base >= seqStack->stacksize) {//栈满seqStack->base = (ElementType *)realloc(seqStack->base, (seqStack->stacksize + STACKINCREMENT) * sizeof(ElementType));if (!seqStack->base) {return 0;}seqStack->stacksize = seqStack->stacksize + STACKINCREMENT;seqStack->top = seqStack->base + seqStack->stacksize;}*seqStack->top++ = element;return 1;
}
9.出栈
Status popSeqStack(SeqStack * seqStack,int * element){if (seqStack->top == seqStack->base) {//栈空return 0;}* element = * (--seqStack->top);return 1;
}
10.遍历
void stackTraverse(SeqStack * seqStack){int *p = seqStack->base;while (p < seqStack->top) {printf("%d\t",*p++);}printf("\n");
}
11.完整代码
#include "stack.h"
#include <stdlib.h>
#include <stdio.h>栈的基本操作
Status initStack(SeqStack *seqStack){seqStack->base = (ElementType *)malloc(sizeof(ElementType) * STACK_INIT_SIZE);if (!seqStack->base) {return 0;}seqStack->top = seqStack->base;seqStack->stacksize = STACK_INIT_SIZE;return 1;
}// 如果栈存在,销毁栈
void destroyStack(SeqStack *seqStack){free(seqStack->base);//释放栈基址的存储空间seqStack->base = seqStack->top = NULL;//栈顶和栈底置空seqStack->stacksize = 0;//栈大小置零
}void clearStack(SeqStack * seqStack){seqStack->top = seqStack->base;
}// 栈空
Status seqStackEmpty(SeqStack *seqStack){return seqStack->top == seqStack->base;
}// 栈的长度
int seqStackLength(SeqStack * seqStack){return seqStack->top - seqStack->base;
}// 获取栈顶元素
Status getSeqStackTop(SeqStack * seqStack,int *element){if (seqStack->top == seqStack->base) {return 0;}*element = *(seqStack->top - 1);return 1;
}// 入栈
Status push(SeqStack *seqStack,ElementType element){if (seqStack->top -seqStack->base >= seqStack->stacksize) {//栈满seqStack->base = (ElementType *)realloc(seqStack->base, (seqStack->stacksize + STACKINCREMENT) * sizeof(ElementType));if (!seqStack->base) {return 0;}seqStack->stacksize = seqStack->stacksize + STACKINCREMENT;seqStack->top = seqStack->base + seqStack->stacksize;}*seqStack->top++ = element;return 1;
}// 出栈
Status popSeqStack(SeqStack * seqStack,int * element){if (seqStack->top == seqStack->base) {//栈空return 0;}*element = * (--seqStack->top);return 1;
}void stackTraverse(SeqStack * seqStack){int *p = seqStack->base;while (p < seqStack->top) {printf("%d\t",*p++);}printf("\n");
}void testStack(void){SeqStack seqStack;printf("栈初始化中...");if (initStack(&seqStack)) {printf("栈初始化成功\n");}else{printf("栈初始化失败\n");}printf("入栈...\n");if (push(&seqStack, 1)) {printf("入栈成功\n");}if (push(&seqStack, 2)) {printf("入栈成功\n");}if (push(&seqStack, 3)) {printf("入栈成功\n");}printf("栈中元素:\n");stackTraverse(&seqStack);printf("栈的长度:%d\n",seqStackLength(&seqStack));if (!seqStackEmpty(&seqStack)) {printf("栈不为空\n");}int top;if (getSeqStackTop(&seqStack, &top)) {printf("栈顶元素获取成功\n");}printf("栈顶元素:%d\n",top);//出栈测试int element;if (popSeqStack(&seqStack, &element)) {printf("出栈成功,出栈元素为:%d\n",element);}if (popSeqStack(&seqStack, &element)) {printf("出栈成功,出栈元素为:%d\n",element);}if (popSeqStack(&seqStack, &element)) {printf("出栈成功,出栈元素为:%d\n",element);}printf("栈的长度:%d\n",seqStackLength(&seqStack));if (seqStackEmpty(&seqStack)) {printf("栈为空\n");}destroyStack(&seqStack);
}
二、队列
1.队列的概念
队列是一种先进先出(FIFO)的线性表。它允只允许在表的一端进行插入,一端进行删除。允许插入的一端叫做队尾,允许删除的一端叫做队头。
栈是一种具有特定操作的数据结构,它按照"先进后出"的原则存储和访问数据。栈具有两个基本操作,分别为入栈(push)和出栈(pop)。入栈将元素放入栈的顶部,出栈则将栈顶的元素取出。栈在计算机科学中广泛应用,例如函数调用、表达式求值、递归算法等。
2.队列的链式表示和实现
1.定义
//= = = = ADT Queue 的表示和实现 = = = =
//- - - - - 单链队列 队列的链式存储结构 - - - - -
typedef int Status;
typedef int QElemType;
typedef struct QNode{QElemType data;struct QNode * next;
}QNode,*QueuePtr;
typedef struct {QueuePtr front; // 队头指针QueuePtr rear; // 队尾指针
}LinkQueue;
2.初始化
队列初始化的时候,队头和队尾相同。
// 队列初始化
Status initQueue(LinkQueue *queue) {queue->front = queue->rear = (QueuePtr)malloc(sizeof(QNode));if (!queue->front) {return 0; // 初始化失败}queue->front->next = NULL;return 1; // 初始化成功
}
3.销毁
释放队列存储空间。
// 队列销毁
Status destroyQueue(LinkQueue *queue) {while (queue->front) {queue->rear = queue->front->next;free(queue->front);queue->front = queue->rear;}return 1; // 销毁成功
}
4.清空
// 队列清空
Status clearQueue(LinkQueue *queue) {QueuePtr p, q;queue->rear = queue->front;p = queue->front->next;queue->front->next = NULL;while (p) {q = p;p = p->next;free(q);}return 1; // 清空成功
}
5.空队列
队头和队尾相同的时候为空队列。
// 队列判空
Status emptyQueue(LinkQueue *queue) {return queue->front == queue->rear;
}
6.队列长度
比较栈顶和栈顶的指针
// 队列长度
Status queueLength(LinkQueue *queue) {int length = 0;QueuePtr p = queue->front;while (p != queue->rear) {length++;p = p->next;}return length;
}
7.获取队头
获取队头元素。
// 队头元素
Status queueHead(LinkQueue *queue, QElemType *element) {if (emptyQueue(queue)) {return 0; // 队列为空}*element = queue->front->next->data;return 1; // 获取成功
}
8.入队
// 入队
Status enQueue(LinkQueue *queue, QElemType element) {QueuePtr p = (QueuePtr)malloc(sizeof(QNode));if (!p) {return 0; // 内存分配失败}p->data = element;p->next = NULL;queue->rear->next = p;queue->rear = p;return 1; // 入队成功
}
9.出队
// 出队
Status deQueue(LinkQueue *queue, QElemType *element) {if (emptyQueue(queue)) {return 0; // 队列为空}QueuePtr p = queue->front->next;*element = p->data;queue->front->next = p->next;if (queue->rear == p) {queue->rear = queue->front;}free(p);return 1; // 出队成功
}
10.遍历队列
// 遍历队列
void traverseQueue(LinkQueue *queue) {QueuePtr p = queue->front->next;while (p) {printf("%d\t", p->data);p = p->next;}printf("\n");
}
11.完整代码
#include <stdio.h>
#include <stdlib.h>//= = = = ADT Queue 的表示和实现 = = = =
//- - - - - 单链队列 队列的链式存储结构 - - - - -
typedef int Status;
typedef int QElemType;
typedef struct QNode{QElemType data;struct QNode * next;
}QNode,*QueuePtr;
typedef struct {QueuePtr front; // 队头指针QueuePtr rear; // 队尾指针
}LinkQueue;
// 队列初始化
Status initQueue(LinkQueue *queue) {queue->front = queue->rear = (QueuePtr)malloc(sizeof(QNode));if (!queue->front) {return 0; // 初始化失败}queue->front->next = NULL;return 1; // 初始化成功
}// 队列销毁
Status destroyQueue(LinkQueue *queue) {while (queue->front) {queue->rear = queue->front->next;free(queue->front);queue->front = queue->rear;}return 1; // 销毁成功
}// 队列清空
Status clearQueue(LinkQueue *queue) {QueuePtr p, q;queue->rear = queue->front;p = queue->front->next;queue->front->next = NULL;while (p) {q = p;p = p->next;free(q);}return 1; // 清空成功
}// 队列判空
Status emptyQueue(LinkQueue *queue) {return queue->front == queue->rear;
}// 队列长度
Status queueLength(LinkQueue *queue) {int length = 0;QueuePtr p = queue->front;while (p != queue->rear) {length++;p = p->next;}return length;
}// 队头元素
Status queueHead(LinkQueue *queue, QElemType *element) {if (emptyQueue(queue)) {return 0; // 队列为空}*element = queue->front->next->data;return 1; // 获取成功
}// 入队
Status enQueue(LinkQueue *queue, QElemType element) {QueuePtr p = (QueuePtr)malloc(sizeof(QNode));if (!p) {return 0; // 内存分配失败}p->data = element;p->next = NULL;queue->rear->next = p;queue->rear = p;return 1; // 入队成功
}// 出队
Status deQueue(LinkQueue *queue, QElemType *element) {if (emptyQueue(queue)) {return 0; // 队列为空}QueuePtr p = queue->front->next;*element = p->data;queue->front->next = p->next;if (queue->rear == p) {queue->rear = queue->front;}free(p);return 1; // 出队成功
}// 遍历队列
void traverseQueue(LinkQueue *queue) {QueuePtr p = queue->front->next;while (p) {printf("%d\t", p->data);p = p->next;}printf("\n");
}
void testQueue(void){LinkQueue queue;initQueue(&queue);enQueue(&queue, 1);enQueue(&queue, 2);enQueue(&queue, 3);printf("队列中的元素: ");traverseQueue(&queue);int element;if (queueHead(&queue, &element)) {printf("队头元素为: %d\n", element);}printf("队列的长度为: %d\n", queueLength(&queue));printf("出队操作: ");while (!emptyQueue(&queue)) {deQueue(&queue, &element);printf("%d\t", element);}printf("\n");destroyQueue(&queue);
}int main(int argc, const char *argv[]) {testQueue();return 0;
}
3.队列的顺序表示和实现
1.定义
//- - - - - 队列的顺序存储结构 - - - - -
typedef int Status;
typedef int QElemType;
#define MAXSIZE 10
typedef struct {QElemType * base; // 存储空间的基地址int front; // 头指针int rear; // 尾指针
}SeqQueue;
2.初始化
队列初始化的时候,队头和队尾相同。
// 构造一个空队列
Status initSeqQueue(SeqQueue * seqQueue){seqQueue->base = (QElemType *)malloc(sizeof(QElemType) * MAXSIZE);if (!seqQueue->base) {return 0;}seqQueue->front = seqQueue->rear = 0;return 1;}
3.销毁
释放队列存储空间。
// 销毁队列
Status destroySeqQueue(SeqQueue * seqQueue){free(seqQueue->base);seqQueue->base = NULL;seqQueue->front = seqQueue->rear = 0; // 头尾指针置零return 1;}
4.清空
// 清空队列
Status clearSeqQueue(SeqQueue * seqQueue){seqQueue->front = seqQueue->rear = 0;return 1;}
5.空队列
队头和队尾相同的时候为空队列。
// 队空
Status seqQueueEmpty(SeqQueue * seqQueue){return seqQueue->front == seqQueue->rear;}
6.队列长度
比较栈顶和栈顶的指针
// 队列长度
Status lengthQueue(SeqQueue * seqQueue){return seqQueue->rear - seqQueue->front;
}
7.获取队头
获取队头元素。
// 获取队头元素
Status getSeqQueueFront(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];return 1; // 获取成功
}
8.入队
// 入队
Status enSeqQueue(SeqQueue *seqQueue, int element){if (seqQueue->rear == MAXSIZE) { // 队列已满return 0;}seqQueue->base[seqQueue->rear] = element;seqQueue->rear++;return 1;}
9.出队
// 出队
Status deSeqQueue(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];seqQueue->front++;return 1;}
10.遍历队列
// 遍历队列
void queueTraverse(SeqQueue * seqQueue){if (seqQueueEmpty(seqQueue)) {printf("队列为空\n");return;}printf("队列元素为: ");for (int i = seqQueue->front; i < seqQueue->rear; i++) {printf("%d ", seqQueue->base[i]);}printf("\n");
}
11.完整代码
#import <Foundation/Foundation.h>
#include <stdlib.h>//- - - - - 队列的顺序存储结构 - - - - -
typedef int Status;
typedef int QElemType;
#define MAXSIZE 10
typedef struct {QElemType * base; // 存储空间的基地址int front; // 头指针int rear; // 尾指针
}SeqQueue;// 构造一个空队列
Status initSeqQueue(SeqQueue * seqQueue){seqQueue->base = (QElemType *)malloc(sizeof(QElemType) * MAXSIZE);if (!seqQueue->base) {return 0;}seqQueue->front = seqQueue->rear = 0;return 1;}// 销毁队列
Status destroySeqQueue(SeqQueue * seqQueue){free(seqQueue->base);seqQueue->base = NULL;seqQueue->front = seqQueue->rear = 0; // 头尾指针置零return 1;}// 清空队列
Status clearSeqQueue(SeqQueue * seqQueue){seqQueue->front = seqQueue->rear = 0;return 1;}// 队空
Status seqQueueEmpty(SeqQueue * seqQueue){return seqQueue->front == seqQueue->rear;}// 队列长度
Status lengthQueue(SeqQueue * seqQueue){return seqQueue->rear - seqQueue->front;
}// 获取队头元素
Status getSeqQueueFront(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];return 1; // 获取成功
}// 入队
Status enSeqQueue(SeqQueue *seqQueue, int element){if (seqQueue->rear == MAXSIZE) { // 队列已满return 0;}seqQueue->base[seqQueue->rear] = element;seqQueue->rear++;return 1;}// 出队
Status deSeqQueue(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];seqQueue->front++;return 1;}// 遍历队列
void queueTraverse(SeqQueue * seqQueue){if (seqQueueEmpty(seqQueue)) {printf("队列为空\n");return;}printf("队列元素为: ");for (int i = seqQueue->front; i < seqQueue->rear; i++) {printf("%d ", seqQueue->base[i]);}printf("\n");
}int main(int argc, const char * argv[]) {SeqQueue seqQueue;printf("队列初始化中...\n");if (initSeqQueue(&seqQueue)) {printf("队列初始化成功\n");}else{printf("队列初始化失败\n");}printf("**********\t队列长度测试\t**********\n");if (seqQueueEmpty(&seqQueue)) {printf("队列为空,队列长度为:%d\n",lengthQueue(&seqQueue));}printf("**********\t入队测试\t**********\n");for (int i = 1; i<=3; i++) {if (enSeqQueue(&seqQueue,i)) {printf("数据元素%d入队成功\n",i);} else {printf("数据元素%d入队失败,队列已满\n",i);}}printf("**********\t队列长度测试\t**********\n");if (!seqQueueEmpty(&seqQueue)) {printf("队列不为空,队列长度为:%d\n",lengthQueue(&seqQueue));}printf("**********\t出队测试\t**********\n");QElemType element;while (!seqQueueEmpty(&seqQueue)) {if (deSeqQueue(&seqQueue, &element)) {printf("出队元素为: %d\n", element);}}return 0;
}
4.循环队列的顺序表示和实现
在使用顺序表表示队列的时候,会出现假溢出的问题,为了解决这个问题,我们可以对顺序表加以修改,使用循环队列解决假溢出的问题。
1.定义
//- - - - - 队列的顺序存储结构 - - - - -
typedef int Status;
typedef int QElemType;
#define MAXSIZE 10
typedef struct {QElemType * base; // 存储空间的基地址int front; // 头指针int rear; // 尾指针int count; // 元素个数
}SeqQueue;
2.初始化
队列初始化的时候,队头和队尾相同。
// 构造一个空队列
Status initSeqQueue(SeqQueue * seqQueue){seqQueue->base = (QElemType *)malloc(sizeof(QElemType) * MAXSIZE);if (!seqQueue->base) {return 0;}seqQueue->front = seqQueue->rear = 0;seqQueue->count = 0;return 1;}
3.销毁
释放队列存储空间。
// 销毁队列
Status destroySeqQueue(SeqQueue * seqQueue){free(seqQueue->base);seqQueue->base = NULL;seqQueue->front = seqQueue->rear = 0; // 头尾指针置零seqQueue->count = 0;return 1;}
4.清空
// 清空队列
Status clearSeqQueue(SeqQueue * seqQueue){seqQueue->front = seqQueue->rear = 0;seqQueue->count = 0;return 1;}
5.空队列
队头和队尾相同的时候为空队列。
// 队空
Status seqQueueEmpty(SeqQueue * seqQueue){return seqQueue->count == 0;}
6.队列长度
比较栈顶和栈顶的指针
// 队列长度
Status lengthQueue(SeqQueue * seqQueue){return seqQueue->count;
}
7.获取队头
获取队头元素。
// 获取队头元素
Status getSeqQueueFront(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];return 1; // 获取成功
}
8.入队
// 入队
Status enSeqQueue(SeqQueue *seqQueue, int element){if ((seqQueue->rear + 1) % MAXSIZE == seqQueue->front) { // 队列已满return 0;}seqQueue->base[seqQueue->rear] = element;seqQueue->rear = (seqQueue->rear + 1) % MAXSIZE;seqQueue->count++;return 1;}
9.出队
// 出队
Status deSeqQueue(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];seqQueue->front = (seqQueue->front + 1) % MAXSIZE;seqQueue->count--;return 1;}
10.遍历队列
// 遍历队列
void queueTraverse(SeqQueue * seqQueue){if (seqQueueEmpty(seqQueue)) {printf("队列为空\n");return;}int i = seqQueue->front;printf("队列元素为: ");while (i != seqQueue->rear) {printf("%d ", seqQueue->base[i]);i = (i + 1) % MAXSIZE;}printf("\n");
}
11.完整代码
#import <Foundation/Foundation.h>
#include <stdlib.h>//- - - - - 队列的顺序存储结构 - - - - -
typedef int Status;
typedef int QElemType;
#define MAXSIZE 10
typedef struct {QElemType * base; // 存储空间的基地址int front; // 头指针int rear; // 尾指针int count; // 元素个数
}SeqQueue;// 构造一个空队列
Status initSeqQueue(SeqQueue * seqQueue){seqQueue->base = (QElemType *)malloc(sizeof(QElemType) * MAXSIZE);if (!seqQueue->base) {return 0;}seqQueue->front = seqQueue->rear = 0;seqQueue->count = 0;return 1;}// 销毁队列
Status destroySeqQueue(SeqQueue * seqQueue){free(seqQueue->base);seqQueue->base = NULL;seqQueue->front = seqQueue->rear = 0; // 头尾指针置零seqQueue->count = 0;return 1;}// 清空队列
Status clearSeqQueue(SeqQueue * seqQueue){seqQueue->front = seqQueue->rear = 0;seqQueue->count = 0;return 1;}// 队空
Status seqQueueEmpty(SeqQueue * seqQueue){return seqQueue->count == 0;}// 队列长度
Status lengthQueue(SeqQueue * seqQueue){return seqQueue->count;
}// 获取队头元素
Status getSeqQueueFront(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];return 1; // 获取成功
}// 入队
Status enSeqQueue(SeqQueue *seqQueue, int element){if ((seqQueue->rear + 1) % MAXSIZE == seqQueue->front) { // 队列已满return 0;}seqQueue->base[seqQueue->rear] = element;seqQueue->rear = (seqQueue->rear + 1) % MAXSIZE;seqQueue->count++;return 1;}// 出队
Status deSeqQueue(SeqQueue * seqQueue, QElemType *element){if (seqQueueEmpty(seqQueue)) {return 0; // 队列为空}*element = seqQueue->base[seqQueue->front];seqQueue->front = (seqQueue->front + 1) % MAXSIZE;seqQueue->count--;return 1;}// 遍历队列
void queueTraverse(SeqQueue * seqQueue){if (seqQueueEmpty(seqQueue)) {printf("队列为空\n");return;}int i = seqQueue->front;printf("队列元素为: ");while (i != seqQueue->rear) {printf("%d ", seqQueue->base[i]);i = (i + 1) % MAXSIZE;}printf("\n");
}int main(int argc, const char * argv[]) {SeqQueue seqQueue;printf("队列初始化中...\n");if (initSeqQueue(&seqQueue)) {printf("队列初始化成功\n");}else{printf("队列初始化失败\n");}printf("**********\t队列长度测试\t**********\n");if (seqQueueEmpty(&seqQueue)) {printf("队列为空,队列长度为:%d\n",lengthQueue(&seqQueue));}printf("**********\t入队测试\t**********\n");for (int i = 1; i<=MAXSIZE; i++) {if (enSeqQueue(&seqQueue,i)) {printf("数据元素%d入队成功\n",i);} else {printf("数据元素%d入队失败,队列已满\n",i);}}printf("**********\t队列长度测试\t**********\n");if (!seqQueueEmpty(&seqQueue)) {printf("队列不为空,队列长度为:%d\n",lengthQueue(&seqQueue));}printf("**********\t出队测试\t**********\n");QElemType element;while (!seqQueueEmpty(&seqQueue)) {if (deSeqQueue(&seqQueue, &element)) {printf("出队元素为: %d\n", element);}}return 0;
}