⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkqueue.c

📁 完全由C语言实现的图的相关操作
💻 C
字号:
#include "stdafx.h"
Status InitQueue(LinkQueue* Q)
{
  // 构造一个空队列Q,该队列是带头结点的
  Q->front=Q->rear = (QueuePtr) malloc(sizeof(QNode)) ;
  if(!Q->front) exit(1); //存储分配失败
  Q->front->next = NULL ;
  return OK;
}

Status DestroyQueue(LinkQueue* Q)
{ // 销毁队列Q
  while(Q->front)
  {
    Q->rear = Q->front->next ;
    free(Q->front) ;
    Q->front = Q->rear ;
  }
  Q->front = Q->rear = NULL;
  return OK;
}

Status ClearQueue(LinkQueue* Q) 
{//清空队列里的元素
   DestroyQueue(Q);
   InitQueue(Q);
   return OK;
}

int QueueEmpty(LinkQueue* Q)
{ //队列空则返回true , 否则返回false
  if(Q->front==Q->rear) return 1;
  else return 0;
}

int QueueLength(LinkQueue* Q)
{ //获取队列的长度
  QueuePtr p= Q->front ;
  int length=0;
  for(length=0;p->next != NULL;p=p->next,length++);
  return length;
}
 
Status GetHead(LinkQueue* Q,int* e)
{
  //获得队列的头结点
  if(Q->rear == Q->front) return -1;
  *e = Q->front->next->data;
  return OK;
}

 Status EnQueue(LinkQueue* Q,int e)
{
 //插入元素e为Q的新的队尾元素。 
  QueuePtr p = (QueuePtr) malloc(sizeof(QNode)) ;
  if(!p) exit(1) ; //分配存储空间失败
  p->data = e;
  p->next = NULL;
  Q->rear ->next = p;
  Q->rear = p;
  return OK;
}

Status DeQueue(LinkQueue* Q,int* e)
{
  //若队列不空,则删除Q的队头元素,并用e返回队头元素的值
   if(Q->front==Q->rear) return ERROR;
   QueuePtr p = Q->front->next;
   *e = p->data;
   Q->front->next = p->next;
   if(Q->rear == p) Q->rear = Q->front ; //删除的是尾结点
   free(p);
   p=NULL;
   return 0;
}

Status QueueTraverse(LinkQueue* Q)
{//从队头到队尾依次对队列Q中的每一个元素进行遍历
    QueuePtr temp=Q->front;
    for(;temp!=Q->rear;temp=temp->next)
    {
        printf("%d  ",temp->data);
    }
   return OK;
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -