链式队列的c++代码和原理以及编译分析

链式队列代码:

编译分析:

1文件结构:

image  image

在初步编写mian

#include<iostream.h>
#include<iomanip.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include"linkqueue.h"
void mian ()
{

}

编译成功:

接下来就测试一下是不是真的奏效:

接下来出错啦

事实说明,文件之间的构建是一个不小问题;

之后,发现是main写错成mian,事实证明这是一个容易写错的单词

调试结果如下:证实全部数据入队:

image

 image

这个测试证明在出队操作中,我们一个写法是错的.

if(rear==p) rear=NULL;
    cerr<<"队列只有一个节点\n";

修改为

if(rear==p)

{rear=NULL;
    cerr<<"队列只有一个节点\n";


队列链式实现的原理:

1:在队列中插入一个元素为x的新队尾结点:

void linkqueue::enqueue(datatype x)
//
{
    queuenode *p;
    p=(queuenode *malloc(sizeof(queuenode));//
    p->data=x;
    p->next=NULL;
    if((!queueempity()){ rear->next=p; rear=p;}
        else front=rear=p;
    count++;
}

定义指针,申请空间,赋值,完成第一步工作.

关键在第二步:

这个问题可以查阅相关课件资料:

image

2 在队列中实现出队操作的原理:

datatype linkqueue::dequeue()
{   cerr<<"出队操作,你在调用linkqueue::dequeue()函数\n";
    datatype x;
    queuenode *p=front;
    if(queueempty())
    {  cerr<<"队列已经空了\n";exit(1); }
    cerr<<"删除队头,返回队头数据\n";
    x=p->data;
    front=p->next;
    if(rear==p) rear=NULL;
    cerr<<"队列只有一个节点\n";
    count--;
    delete p;
    return x;
}

原文地址:https://www.cnblogs.com/fleetwgx/p/1448494.html