C 语言数据结构之链队列;

链队列:用链表表示的队列称为链队列, 我们采用使用头节点的队列,并设置一个队头指针和队尾指针;队尾指针指向尾节点,当对头指针和队尾指针均指向头节点时为空队列;


链队列的定义:
// 链队列节点的定义;

 typedef struct Node 
 {
     int  data;
     struct Node   *next  //
    
 }LinkQueueNode ;
// 链队列头节点定义;
typedef struct {
   LinkQueueNode *front;
   LinkQueue Node *rear ;
} LinkQueue;

operation

  • 初始化链表

          int InitQueue (LinkQueue *Q) // 队首头节点的出初化;
          {
          // 申请一个队空间使队首指针指向它;
           Q->front(LinkQueueNode*)sizeof(LinkQueueNode); 
           if(Q->front!=NULL)  
            {
               Q->rear=Q->front;   // 队首队尾指向同一个空间,队列为空时;
               Q->front->next=NULL;  
               return 1;
            }
            return 0;   
            }
    
    
  • 入队操作

      
     int EnterQueue (LinkQueue *Q , int x)
      {
       LinkQueueNode *NweNode;
       //申请一个空间
      NewNode =(LinkQueueNode*)malloc(sizeof(LinkQueueNode);
      //判断是否成功;
      if(NewNode!=NULL)
       {
          NewNode->data=x;  
          NewNode->next=NULL;  
          // 尾插法思想找到尾尾的下一个个接p p成为新的尾;
          Q->rear->next=NewNode ;
          Q->rear=NewNode;
          return 1;
       }
       else reuturn 0; 
      }
    
    
    
  • 出队;

       int DeleteQueue(LinkQueue *Q , int x)
       {
      LinkQueueNode  *p;
      //判断出队前是否为空
      if(Q->front==Q->rear)
      return 0;
      else   
      p=Q->front->next;  //保存将要删除的节点;
      Q->front->next=p->next;  //删除首元素,头节点指向首元数的下一个;
      if(Q->rear==p)  //判断删除后是否为空;
      Q->rear=Q->front;  // 为空时的关系;
      free(p);
      return 1;
    }
    
    • *
  • 队列满足先进先出的关系, 实现此关系由队首队尾两个指针的形式实现,
  • 队的初始化 Q->rear=Q->front; 也是判断队列是否为空的方法, 子啊
  • 删除前后均要判断是否为空队列,

删除前; Q->rear=Q->front;
删除后; Q->rear==p;

  • 入队注意与链表的尾插法的关系;

你可能感兴趣的:(数据结构与算法,队列)