大家好,今天更新的是 “队列的基本操作”
队列可以用顺序表的方式进行存储,也可以用链表的形式存放
下面我要介绍的是链表的形式建立队列
注意: 队列就是要遵循“先进先出”的一种模式
/ hrad.h //
#include <iostream>
using namespace std;
//所谓队列就是先进先出的线性表
//用链表表示队列简称"链表列"
struct QueueNode
{
char data;
QueueNode *next;
};
typedef QueueNode* QueuePtr;
struct LinkQueue
{
QueuePtr front;
QueuePtr rear;
};
为了方便起见,我们创建两个指针,一个指向队头,一个指向对尾
///因为我们对的队列的操作是在头和尾进行的
bool InitQueue ( LinkQueue &Q )
{
Q.front=( QueuePtr) malloc ( sizeof(QueueNode) );//一个空的头节点
if( !Q.front )
{
return false;
}
Q.rear=Q.front;//而rear是用来指向最后一个元素
Q.front->next=NULL;
return true;
}
void DestroyQueue( LinkQueue &Q )
{
while( Q.front )
{
Q.rear = Q.front ->next;
free ( Q.front );
Q.front=Q.rear;
}
cout<<"整个队列删除完毕"<<endl;
}
bool EnterQueue ( LinkQueue &Q )
{
QueuePtr p;
p = (QueuePtr) malloc ( sizeof(QueueNode) );
if( !p )
{
return false ;
}
cout<<"输入新插入节点的信息:";
cin>>p->data;
p->next=NULL;
Q.rear->next=p; ///其实这里只有尾指针的移动,头指针完全没动
Q.rear=p; ///最后这一步是尾指针指向p(最后一个元素)
return true;
}
///第一个元素出列
bool DeQueue( LinkQueue &Q )
{
QueuePtr p;
if( Q.front == Q.rear )
{
cout<<"这是一个空的;队列"<<endl;
return false;
}
p=Q.front->next; p指向的是第一个元素
cout<<"第一个元素 "<< p->data << " 出列"<<endl;
Q.front->next=p->next; //一动指针
if( Q.rear == p ) //在删除这个元素之前需要稍加一个判断
{
Q.front==Q.rear; //看队列中是不是只有p一个元素
}
free(p);
return true;
}
// main.cpp
#include "head.h"
bool InitQueue ( LinkQueue &Q );
bool EnterQueue ( LinkQueue &Q );
bool DeQueue( LinkQueue &Q );
void main()
{
LinkQueue Q;
InitQueue(Q);
for( int i=1; i<=3; i++ )
{
EnterQueue(Q);
}
DeQueue(Q);
}
好的,代码就介绍到这里,希望你能看懂
在下技术有限,难免有错,请见谅!!!