VS2019
说明:
由于代码中使用了C++语法中的引用,因此代码文件创建时要选择C++,但基本
语法都是使用的c语言里的。
2、代码逻辑与原理
队列:是一种队头出队,队尾入队, *** 作受限的数据结构
特性:FIFO(先进先出)or LILO(后进后出)
旧金山大学数据结构动画网站
void InitQueue(queuePtr& Q);//初始化
void EnQueue(queuePtr& Q);//元素入队
bool judgeQueueNull(queuePtr Q);//判断队列是否为空
void printELement(queuePtr Q);//遍历打印队列元素
qElement DeQueueElem(queuePtr &Q);//元素出队,并传出元素
4、完整代码
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include
#include
///
/// 目标:实现队列的创建,完成判断队列是否空、入队、出队、遍历 *** 作。
/// 存储格式:链表
///
///
//定义结构体
typedef int qElement;
typedef struct qNode {
qElement data;//数据域
struct qNode* next;//指针域
}qNode,*qPtr;
typedef struct {
qPtr front;//队头
qPtr rear;//队尾
}queuePtr;
void InitQueue(queuePtr& Q);//初始化
void EnQueue(queuePtr& Q);//元素入队
bool judgeQueueNull(queuePtr Q);//判断队列是否为空
void printELement(queuePtr Q);//遍历打印队列元素
qElement DeQueueElem(queuePtr &Q);//元素出队,并传出元素
int main() {
queuePtr Q;
InitQueue(Q);//初始化队列
EnQueue(Q);//元素入队
printELement(Q);//遍历元素
qElement data;
data = DeQueueElem(Q);//元素出队
printf("出队元素为%d\n",data);
printELement(Q);//遍历元素
return 0;
}
///
/// 1、队列头结点Q给函数;
/// 2、将头指针和尾指针均指向同一结点;
/// 3、并将头指针的指针域置空
///
/// 队列头结点
void InitQueue(queuePtr& Q)
{
Q.front = Q.rear = (qPtr)malloc(sizeof(qNode));//队头队尾指向同一个结点
Q.front->next = NULL;
}
///
/// 1、定义新结点;
/// 2、输入第一个元素;
/// 3、将新元素放入队列中;
/// 4、将队尾指针始终指向队尾;
///
/// 是队列的头结点
void EnQueue(queuePtr& Q)
{
qPtr s;
qElement data;
printf("请输入元素:\n");
scanf("%d",&data);
while (data != 9999)
{
s = (qPtr)malloc(sizeof(qNode));//为新节点申请空间
s->data = data;
s->next = Q.rear->next;//将前一个结点的指针域里的地址给新结点指针域。
Q.rear->next = s;
Q.rear = s;//尾指针始终指向队尾
scanf("%d", &data);
}
}
///
/// 1、将队列Q传入函数;
/// 2、当队头与队尾指针均指向同一个元素,则队列为空,否则不为空;
///
/// 代表队列
/// 队列为空返回true,否则不为空返回false
bool judgeQueueNull(queuePtr Q)
{
if (Q.rear == Q.front) {//如果队尾与队头指针都指向同一个元素,则队列为空
return true;
}
return false;
}
///
/// 1、队列Q传入函数,先将队头赋值给中间变量;
/// 2、判断Q是否为空队列;
/// 3、如果不是,则将依次打印;
///
/// 队列头结点
void printELement(queuePtr Q)
{
qPtr p;
p = Q.front->next;
if (judgeQueueNull(Q))
{
printf("该队列为空!\n");
}
else
{
while (p != NULL)
{
printf("%3d",p->data);//打印元素
p=p->next;
}
printf("\n");
}
}
///
/// 1、将队列头结点传入函数;
/// 2、判断队列是否为空;
/// 3、将出队元素值传各变量data;
/// 4、头指针指向下一个元素。
///
/// 队列头结点
/// 返回要出队的值
qElement DeQueueElem(queuePtr& Q)
{
if (Q.front == Q.rear)
{
return -1;//空队列
}
qElement data;
data = Q.front->next->data;
Q.front = Q.front->next;
return data;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)