链式队列的基本操作教学资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
//取队头元素
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;
}
}
//清空队列
{
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");
{
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));
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;
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)
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;
default:quit=1;
}
retቤተ መጻሕፍቲ ባይዱrn 0;
}
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;
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;
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;
链式队列的基本操作
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
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;
}
//取队头元素
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;
}
}
//清空队列
{
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");
{
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));
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;
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)
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;
default:quit=1;
}
retቤተ መጻሕፍቲ ባይዱrn 0;
}
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;
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;
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;
链式队列的基本操作
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
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;