最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C語(yǔ)言來(lái)解決循環(huán)隊(duì)列問(wèn)題的方法

 更新時(shí)間:2015年08月17日 16:47:38   作者:低調(diào)小一  
這篇文章主要介紹了使用C語(yǔ)言來(lái)解決循環(huán)隊(duì)列問(wèn)題的方法,來(lái)自ACM的練習(xí)題實(shí)例,需要的朋友可以參考下

題目描述:

    大家都知道數(shù)據(jù)結(jié)構(gòu)里面有一個(gè)結(jié)構(gòu)叫做循環(huán)隊(duì)列。顧名思義,這是一個(gè)隊(duì)列,并且是循環(huán)的。但是現(xiàn)在,淘氣的囧哥給這個(gè)循環(huán)隊(duì)列加上了一些規(guī)矩,其中有5條指令:

    (1) Push K, 讓元素K進(jìn)隊(duì)列。

    (2) Pop,對(duì)頭元素出隊(duì)列。

    (3) Query K,查找隊(duì)列中第K個(gè)元素,注意K的合法性。

    (4) Isempty,判斷隊(duì)列是否為空。

    (5) Isfull,判斷隊(duì)列是否已滿。

    現(xiàn)在有N行指令,并且告訴你隊(duì)列大小是M。

輸入:

    第一行包含兩個(gè)整數(shù)N和M。1<=N,M<=100000。

    接下來(lái)有N行,表示指令,指令格式見(jiàn)題目描述。

    其中元素均在int范圍。

輸出:

    對(duì)于指令(1),若隊(duì)列已滿,輸出failed,否則不做輸出。

    對(duì)于指令(2),若隊(duì)列已空,輸出failed,否則不做輸出。

    對(duì)于指令(3),輸出隊(duì)列中第K個(gè)元素,若不存在,輸出failed。

    對(duì)于指令(4)和(5),則用yes或者no回答。

    詳情見(jiàn)樣例。

樣例輸入:

    12 2Push 1Push 2Push 3Query 2Query 3IsemptyIsfullPopPopPopIsemptyIsfull

樣例輸出:

    failed2failednoyesfailedyesno

AC代碼:

   

#include <stdio.h> 
  #include <stdlib.h> 
  #include <string.h> 
   
  #define queuesize 100001  //最大隊(duì)列長(zhǎng)度 
   
  struct queue 
  { 
    int front; 
    int rear; 
    int data[queuesize]; 
    int count; //記錄隊(duì)列中的元素 
  }; 
   
  void InitQueue(struct queue *Q); 
  void EnQueue(struct queue *Q, int element, int m); 
  void Dequeue(struct queue *Q, int m); 
  void QueueSearch(struct queue *Q, int k, int m); 
   
  int main() 
  { 
    int n, m, i, element, k, flag; 
    char command[10]; 
   
    while(scanf("%d%d",&n, &m) != EOF) 
    { 
      if(n < 1 || m > 100000) 
        return 0; 
      struct queue *Q; 
      Q = malloc(sizeof(struct queue)); 
      InitQueue(Q); 
      for(i = 0; i < n; i ++) 
      { 
        scanf("%s",command); 
        if (strcmp(command,"Push") == 0) 
        { 
          scanf("%d",&element); 
          EnQueue(Q, element, m); 
        }else if (strcmp(command,"Pop") == 0) 
        { 
          Dequeue(Q, m); 
        }else if (strcmp(command,"Query") == 0) 
        { 
          scanf("%d",&k); 
          QueueSearch(Q, k, m); 
        }else if (strcmp(command,"Isempty") == 0) 
        { 
          flag = (Q -> count == 0)? 1 : 0; 
          if(flag) 
          { 
            printf("yes\n"); 
          }else 
          { 
            printf("no\n"); 
          } 
        }else if (strcmp(command,"Isfull") == 0) 
        { 
          flag = (Q -> count == m)? 1 : 0; 
          if(flag) 
          { 
            printf("yes\n"); 
          }else 
          { 
            printf("no\n"); 
          } 
        } 
      } 
    }   
    return 0; 
  } 
   
  /** 
   * Description:隊(duì)列初始化 
   */ 
  void InitQueue(struct queue *Q) 
  { 
    Q -> front = Q -> rear = 0; 
    Q -> count = 0; 
  } 
   
  /** 
   * Description:入隊(duì)操作 
   */ 
  void EnQueue(struct queue *Q, int element, int m) 
  { 
    int flag; 
    flag = (Q -> count == m)? 1 : 0;  
   
    if(!flag) 
    { 
      Q -> data[Q -> rear] = element; 
      Q -> count ++; 
      Q -> rear = (Q -> rear + 1) % m; 
    }else 
    { 
      printf("failed\n"); 
    } 
  } 
   
  /** 
   * Description:出隊(duì)操作 
   */ 
  void Dequeue(struct queue *Q, int m) 
  { 
    int flag; 
    int element; 
   
    flag = (Q -> count == 0)? 1 : 0; 
   
    if(!flag) 
    { 
      element = Q -> data[Q -> front]; 
      Q -> front = (Q -> front + 1) % m; 
      Q -> count --; 
    }else 
    { 
      printf("failed\n"); 
    } 
  } 
   
  /** 
   * Description:查找隊(duì)列中的指定元素 
   */ 
  void QueueSearch(struct queue *Q, int k, int m) 
  { 
    int flag, temp; 
    flag = (Q -> count == 0)? 1: 0; 
    temp = Q -> front + k - 1; 
    if((!flag) && (k <= m && k >= 1)) 
    { 
      if((Q -> front < Q -> rear) && ( Q-> front <= temp && Q -> rear > temp)) 
        printf("%d\n",Q -> data[temp]); 
      else if((Q -> front > Q -> rear) && (temp >= Q -> front || temp < Q->rear)) 
        printf("%d\n",Q -> data[temp]); 
      else if(Q -> front == Q -> rear) 
        printf("%d\n",Q -> data[temp]); 
      else 
        printf("failed\n"); 
    }else 
    { 
      printf("failed\n"); 
    } 
  } 

相關(guān)文章

  • C++利用map實(shí)現(xiàn)并查集

    C++利用map實(shí)現(xiàn)并查集

    這篇文章主要為大家詳細(xì)介紹了C++利用map實(shí)現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++之std命名空間

    C++之std命名空間

    這篇文章主要介紹了C++之std命名空間使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 適合初學(xué)者的C語(yǔ)言數(shù)據(jù)類型的講解

    適合初學(xué)者的C語(yǔ)言數(shù)據(jù)類型的講解

    在 C 語(yǔ)言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)。變量的類型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式。
    2022-04-04
  • C++中字符串與整型及浮點(diǎn)型轉(zhuǎn)換全攻略

    C++中字符串與整型及浮點(diǎn)型轉(zhuǎn)換全攻略

    C++算法刷題等過(guò)程中經(jīng)常會(huì)遇到字符串與數(shù)字類型的轉(zhuǎn)換,在這其中雖然樸素的算法有不少,但是對(duì)于double等類型還是可以說(shuō)遇到一些麻煩,所以今天就來(lái)說(shuō)說(shuō)使用C++標(biāo)準(zhǔn)庫(kù)中的函數(shù)實(shí)現(xiàn)這些功能。感興趣的小伙伴一起參與閱讀吧
    2021-09-09
  • C++實(shí)現(xiàn)逆波蘭式

    C++實(shí)現(xiàn)逆波蘭式

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)逆波蘭式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 從txt中讀入數(shù)據(jù)到數(shù)組中(fscanf)的實(shí)現(xiàn)代碼

    從txt中讀入數(shù)據(jù)到數(shù)組中(fscanf)的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)?lái)一篇從txt中讀入數(shù)據(jù)到數(shù)組中(fscanf)的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C++中指針和引用的區(qū)別分析

    C++中指針和引用的區(qū)別分析

    這篇文章主要介紹了C++中指針和引用的區(qū)別,有需要的朋友可以參考一下
    2014-01-01
  • C++經(jīng)典例題之字符串特定規(guī)則反轉(zhuǎn)問(wèn)題的解法

    C++經(jīng)典例題之字符串特定規(guī)則反轉(zhuǎn)問(wèn)題的解法

    這篇文章主要介紹了如何解決字符串反轉(zhuǎn)問(wèn)題,通過(guò)將字符串按每2k個(gè)字符為一個(gè)區(qū)間進(jìn)行劃分,并使用雙指針?lè)椒▉?lái)確定實(shí)際反轉(zhuǎn)的邊界,最終實(shí)現(xiàn)字符串按特定規(guī)則進(jìn)行反轉(zhuǎn),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)四窗口聊天

    C語(yǔ)言實(shí)現(xiàn)四窗口聊天

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)四窗口聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

根河市| 札达县| 台东市| 宣威市| 嵊泗县| 安义县| 丽江市| 阿拉善左旗| 漠河县| 武义县| 津南区| 航空| 华池县| 汉沽区| 西充县| 巩义市| 镇康县| 永泰县| 唐山市| 苍溪县| 福州市| 周至县| 云南省| 资中县| 阳城县| 大新县| 沈丘县| 阜城县| 龙川县| 山东省| 千阳县| 永年县| 黎川县| 仁布县| 当阳市| 依安县| 民丰县| 仙桃市| 迁西县| 东台市| 齐河县|