链式队列的c++代码和原理以及编译分析
链式队列代码:
编译分析:
1文件结构:
在初步编写mian
#include<iostream.h>
#include<iomanip.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include"linkqueue.h"
void mian ()
{
}
后
编译成功:
接下来就测试一下是不是真的奏效:
接下来出错啦
事实说明,文件之间的构建是一个不小问题;
之后,发现是main写错成mian,事实证明这是一个容易写错的单词
调试结果如下:证实全部数据入队:
这个测试证明在出队操作中,我们一个写法是错的.
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++;
}
定义指针,申请空间,赋值,完成第一步工作.
关键在第二步:
这个问题可以查阅相关课件资料:
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;
}