燃烧的发丝 发表于 2017-7-24 20:17:44

数据结构与算法-队列的实现(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]
查看完整版本: 数据结构与算法-队列的实现(C++)及课后题目