链式队列的基本操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

typedef char ElemType;

typedef struct QNode

{

ElemType data;

struct QNode *next;

}QNode,*QueuePtr;

typedef struct

{

QueuePtr front;

QueuePtr rear;

}LinkQueue;//链式队列

//初始化

LinkQueue InitQueue()

{

LinkQueue Q;

Q.rear=(QNode *)malloc(sizeof(QNode));

Q.front =Q.rear;

if(Q.front ==NULL) printf("内存分配失败\n");

else {Q.front->next=NULL;return Q;}

}

//判断链栈是否为空

int QueueEmpty(LinkQueue Q)

{

if(Q.front->next==NULL) return 1;

else return 0;

}

//求链式队列长度

int QueueLength(LinkQueue Q)

{

int count=0;

QNode *s;

s=Q.front->next ;

while(s!=NULL)

{

count++;

s=s->next ;

}

return count;

}

//元素入队

int EnQueue(LinkQueue &Q,ElemType e)

{

QNode *s;

s=(QNode *)malloc(sizeof(QNode));

if(!s) {printf("内存分配失败\n");return 0;}

else

{

s->data =e;

s->next =NULL;

Q.rear->next =s;

Q.rear =s;

return 1;

}

}

//元素出队

int DeQueue(LinkQueue &Q,ElemType &e)

{

QNode *s;

if(Q.front==Q.rear)

{

printf("队列已空\n");

return 0;

}

else

{

s=Q.front->next ;

e=s->data ;

Q.front->next =s->next ;

if(Q.rear==s) Q.rear =Q.front ;

free(s);

return 1;

}

}

//取队头元素

int GetHead(LinkQueue Q,ElemType &e)

{

QNode *s;

if(Q.front ==Q.rear ){printf("队列已空\n");return 0;} else

s=Q.front->next;

e=s->data ;

return 1;

}

}

//清空队列

void ClearQueue(LinkQueue &Q)

{

while(Q.front !=NULL )

{

Q.rear =Q.front->next ;

free(Q.front );

Q.front =Q.rear;

}

}

//遍历队列

void QueueTraverse(LinkQueue Q)

{

QNode *s;

ElemType e;

s=Q.front->next ;

while(s)

{

e=s->data;

printf("%c ",e);

s=s->next;

}

}

int scan()

{

int d;

printf("\n\n\n\n请输入要进行的操作\n1.初始化一个链式队列\n2.清空队列\n3.求队列长度\n4.检查队列是否为空\n5.取队头元素\n6.元素入队\n7.元素出队\n8.输出队列所有元素\n其他键退出...\n");

scanf("%d",&d);

return (d);

}

int main()

{

int quit=0;

ElemType e;

LinkQueue Q;

while(!quit)

switch(scan())

{

case 1:Q=InitQueue();printf("\n");break;

case 2:ClearQueue(Q);printf("\n");break;

case 3:printf("队列的长度为:%d\n",QueueLength(Q));break;

case 4:if(QueueEmpty(Q))printf("队列为空\n");else printf("队列非空\n");break;

case 5:if(GetHead(Q,e)) printf("队头元素为:%c",e);else break;break;

case 6:printf("请输入要入队的元素:");getchar();scanf("%c",&e);if(EnQueue(Q,e)) printf("%c已入队\n",e);break;

case 7:if(DeQueue(Q,e)) printf("%c已出队\n",e);break;

case 8:QueueTraverse(Q);break;

default:quit=1;

}

return 0;

}

相关文档
最新文档