zoukankan      html  css  js  c++  java
  • 队列的顺序/链式存储实现

    队列:具有一定操作约束的线性表,只能在一端插入,在另一端删除。

    特点:先来先服务,先进先出表

    头front,尾rear

    顺序存储

     1 #define MaxSize <储存数据元素的最大个数>
     2 
     3 struct QNode {
     4 
     5   ElementType Data[MaxSize];
     6 
     7   int rear;  //
     8 
     9   int front;  //
    10 
    11 };
    12 
    13 typedef struct QNode *Queue;
    14  //front = rear = -1;

    循环队列的储存办法:

      (1)使用额外标记:size或者tag(插入为1,删除为0) 域

      (2)仅使用n-1个数组空间

    (1)入队列(循环队列)

     1 void AddQ (Queue PtrQ, ElementType item){
     2 
     3   if ( (PtrQ->rear+1) % MaxSize == PtrQ->front ){
     4 
     5     printf("队列满");
     6 
     7     return;
     8 
     9   }
    10   //这两句看情况进行交换
    11   PtrQ->reat = (PtrQ->rear+1) % MaxSize;
    12 
    13   PtrQ->Data[PtrQ->rear] = item;
    14 
    15 }

    (2)出队列

    ElementType DeleteQ ( Queue PtrQ ){
    
      if (PtrQ->front == PtrQ->reat) {
    
        printf("队列空");
    
        return ERROR;
    
      }
    
      else {
    
        PtrQ->front = (PtrQ->front+1) % MaxSize;
    
        return PtrQ->Data[PtrQ->front];
    
      }
    
    }

    链式存储

    struct Node {  //链表的结点结构
    
      ElementType Data;
    
      struct Node *Next;
    
    };
    
    struct QNode {  //链队列结构
      struct Node *rear;  //指向队尾结点
      struct Node *front;  //指向对头结点
    };
    
    typedef struct QNode *Queue;
    
    Queue PtrQ;

    插入和删除操作分别在链表的两头进行

    不带头结点的链式队列出队操作

    ElementType DeleteQ ( Queue PtrQ ){
    
      struct Node *FrontCell;
    
      ElementType FrotElem;
    
      if ( PtrQ->front == NULL ){
    
        printf("队列空");
    
        return ERROR;
    
      }
    
      FrontCell = PtrQ->front;
    
      if (PtrQ->front == PtrQ->rear)  //若队列只有一个元素
    
        PtrQ->front = PtrQ->rear = NULL;  //删除后置队列为空
    
      else {
    
        PtrQ->front = PtrQ->front->Next;
    
      }
    
      FrontElem = FrontCell->Data;
    
      free(FrontCell);
    
      return FrontElem;
    
    }
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/zhengxin909/p/12571766.html
Copyright © 2011-2022 走看看