栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言单链队列的表示与实现实例详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言单链队列的表示与实现实例详解

1.概述:

C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

单链队列使用链表作为基本数据结果,因此不存在伪溢出的问题,队列长度也没有限制。但插入和读取的时间代价会比较高

2.实例代码:


typedef struct QNode
{
 QElemType data;
 struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
 QueuePtr front,rear; 
}linkQueue;

void InitQueue(linkQueue *Q)
{ 
 Q->front=Q->rear=malloc(sizeof(QNode));
 if(!Q->front)
  exit(OVERFLOW);
 Q->front->next=NULL;
}
void DestroyQueue(linkQueue *Q)
{ 
 while(Q->front)
 {
  Q->rear=Q->front->next;
  free(Q->front);
  Q->front=Q->rear;
 }
}
void ClearQueue(linkQueue *Q)
{ 
 QueuePtr p,q;
 Q->rear=Q->front;
 p=Q->front->next;
 Q->front->next=NULL;
 while(p)
 {
  q=p;
  p=p->next;
  free(q);
 }
}
Status QueueEmpty(linkQueue Q)
{ 
 if(Q.front->next==NULL)
  return TRUE;
 else
  return FALSE;
}
int QueueLength(linkQueue Q)
{ 
 int i=0;
 QueuePtr p;
 p=Q.front;
 while(Q.rear!=p)
 {
  i++;
  p=p->next;
 }
 return i;
}
Status GetHead_Q(linkQueue Q,QElemType *e)
{ 
 QueuePtr p;
 if(Q.front==Q.rear)
  return ERROR;
 p=Q.front->next;
 *e=p->data;
 return OK;
}
void EnQueue(linkQueue *Q,QElemType e)
{ 
 QueuePtr p= (QueuePtr)malloc(sizeof(QNode));
 if(!p) 
  exit(OVERFLOW);
 p->data=e;
 p->next=NULL;
 Q->rear->next=p;
 Q->rear=p;
}
Status DeQueue(linkQueue *Q,QElemType *e)
{ 
 QueuePtr p;
 if(Q->front==Q->rear)
  return ERROR;
 p=Q->front; 
 *e=p->data;
 Q->front=p->next; 
 if(Q->rear==p)
  Q->rear=Q->front;
 free(p);
 return OK;
}
void QueueTraverse(linkQueue Q,void(*vi)(QElemType))
{ 
 QueuePtr p;
 p=Q.front->next;
 while(p)
 {
  vi(p->data);
  p=p->next;
 }
 printf("n");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/65709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号