鱼C论坛

 找回密码
 立即注册
查看: 2859|回复: 0

[学习笔记] 数据结构与算法-队列的实现(C++)及课后题目

[复制链接]
发表于 2017-7-24 20:17:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表