|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// 小甲鱼 数据结构与算法 第 3章 30课 队列的C++实现 以及课后作业
// 关于视频中代码的出队操作 的代码 如果不将 QueuePrt p = {0}; 初始化 编译器会报错
//
#include <iostream>
#include <string>
typedef char Elemtype;
//队列的链式存储结构
typedef struct QNode
{
Elemtype data;
struct QNode *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;
} |
|