数据结构与算法-队列的实现(C++)及课后题目
// 小甲鱼数据结构与算法 第 3章30课 队列的C++实现以及课后作业// 关于视频中代码的出队操作 的代码 如果不将 QueuePrt p = {0}; 初始化 编译器会报错
//
#include <iostream>
#include <string>
typedef char Elemtype;
//队列的链式存储结构
typedef struct QNode
{
Elemtype data;
structQNode *next;
}QNode, *QueuePrt;
typedef struct
{
QueuePrt front; //队头指针
QueuePrt rear;//队尾指针
}LinkQueue;
//创建一个有头链表
QueuePrt m_head = { 0 };
//初始化队列
void initQueue(LinkQueue * q)
{
q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));
if (!q->front)
{
exit(0);
}
q->front->next = NULL;
}
// 插入队列操作
void InsertQueue(LinkQueue *q, Elemtype e)
{
QueuePrt p;
p = (QueuePrt)malloc(sizeof(QNode));
if (p ==NULL)
{
exit(0);
}
p->data = e;
p->next = NULL; //将p指向NULL 作为链表尾
q->rear->next = p;//将 队尾指针指向P
q->rear = p;
}
//出队列操作
int deleteQueue(LinkQueue *q, Elemtype *e)
{
QueuePrt p = {0};
if (q->front == q->rear)//如果是空队列 就返回-1
{
return -1;
}
p = q->front->next ;
*e = p->data; //将p 的data 赋值 给 e
q->front->next = p->next; //将队头指针指向下一个元素
if (q->rear == p )//如果只有一个元素就把队尾指针 等于头结点
{
q->rear = q->front;
}
free(p);
return 0;
}
int main()
{
LinkQueue p;
initQueue(&p);
char a = 0;
std::string ss ="abcdefghijklnm#"; //测试
//std::cin >> ss; // 输入
for (auto c:ss) // 遍历
{
if ('#' !=c)
{
InsertQueue(&p, c); // 入队列
}
else
{
a = '#';
InsertQueue(&p, a);
break;
}
}
while (true)
{
deleteQueue(&p, &a); //出队列
std::cout << a;
if (a =='#')
{
break;
}
}
return 0;
}
页:
[1]