链式队列的基本操作代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define TRUE 1
#define FALSE 0
typedef int QElemType;
typedef struct LNode
{
QElemType data;
struct LNode *next;
}LNode , *LinkList;
typedef LinkList QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitQueue_L(LinkQueue &Q)
{//初始化队列
Q.front=Q.rear=new LNode;
Q.front->next=NULL;
}
int IsEmpty(LinkQueue *Q)
{
if(Q->front==Q->rear)
{
return(TRUE);
}
else
{
return(FALSE);
}
}
//队列是否为空或为满
void queueexist(LinkQueue *Q)
{
if(Q->front==Q->rear)
cout<<"该队列为空"<
else if(Q->rear->next!=NULL)
cout<<"该队列为满"<
else
cout<<"该队列既不为空也不为满"<
}
//构造队列,数据元素由键盘输入
void CreateQueue_L(LinkQueue &Q)
{
QElemType temp;
LNode *p;
cout<<"输入要插入的队列值(输入-1结束)"<
cin>>temp;
while(temp != -1)
{
p=new LNode;
p->data=temp;
Q.rear->next=p;
p->next=NULL;
Q.rear=p;
cin>>temp;
}
}
//入队操作
int EnterQueue(LinkQueue *Q,QElemType x)
{//将数据元素x插入到队列Q中
LNode *NewNode=new LNode;
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return(TRUE);
}
else return(FALSE); //溢出
}
//出队操作
int DeleteQueue(LinkQueue *Q,QElemType *x)
{//将队列Q的队头元素出队,并存放到x所指的存储空间中
LNode *p;
if(Q->front==Q->rear)
return(FALSE);
p=Q->front->next;
Q->front->next=p->next; //队头元素p出队
if(Q->rear==p) //如果队中只有一个元素p,则p出队后成为空队
Q->rear=Q->front;
*x=p->data;
free(p); //释放存储空间
return(TRUE);
}
//队列长度
void QueueLength_L(LinkQueue Q)
{
int length=0;
if(IsEmpty(&Q));
else
{
LNode *p=new LNode;
p=Q.front->next;
while(p)
{
length++;
p=p->next;
}
}
cout<<"该链队列的长度为:"<
}
//由头到尾依次输出队列的数据元素
void OutputQueue_L(LinkQueue Q)
{
LNode *p=new LNode;
if(Q.front==Q.rear) cout<<"空对列"<
else
{
p=Q.front->next;
cout<<"队列的元素依次为:";
while(p)
{
cout<
p=p->next;
}
cout<
}
}
//销毁队列
void DestroyQueue_L(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
delete Q.front;
Q.front=Q.rear;
}
}
void main()
{
int flag=1,select;
cout<<" ☆☆☆☆链队的基本操作☆☆☆☆"<
cout<<" ☆1.请输入链队列元素:☆ "<
cout<<" ☆2.判断链队列是否为空或为满☆"<
cout<<" ☆3.当前队头元素出队并将其输出链队列各元素☆ "<
cout<<" ☆4.将x入队并输出链队列各元素☆ "<
cout<<" ☆5.当前链队列的长度☆ "<
cout<<" ☆6.销毁队列☆ "<
cout<<" ☆7.退出☆ "<
while(flag)
{
cout<<"请选择:";
cin>>select;
LinkQueue Q;
int x;
switch(select)
{
case 1:
InitQueue_L(Q);
CreateQueue_L(Q);
OutputQueue_L(Q);
break;
cout<<"请选择:";
case 2:
queueexist(&Q);
break;
cout<<"请选择:";
case 3:
DeleteQueue(&Q,&x);
OutputQueue_L(Q);
break;
cout<<"请选择:";
case 4:
cout<<"输入要入队的元素x:";
cin>>x;
EnterQueue(&Q,x);
OutputQueue_L(Q);
break;
cout<<"请选择:";
case 5:
QueueLength_L(Q);
break;
cout<<"请选择:";
case 6:
DestroyQueue_L(Q);
cout<<"销毁成功!可以再重新建立"<
break;
case 7:
flag=0;
break;
}
}
}