链式队列的基本操作代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<data<<" ";

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;

}

}



}



相关文档
最新文档