1. class MyCircularDeque {
    2. //用来存数据的静态数组
    3. private int[] arr;
    4. //数组大小
    5. private int size;
    6. //收尾指针
    7. private int head;
    8. private int tail;
    9. public MyCircularDeque(int k) {
    10. //初始化基本数据
    11. arr = new int[k];
    12. size = 0;
    13. head = 0;
    14. tail = k - 1;
    15. }
    16. public boolean insertFront(int value) {
    17. // 1:头指针左移一位
    18. // 1.1:因为是循环队列,所以头指针为0的时候,左移一位就会走到数组末尾
    19. // 2:在头指针处赋值
    20. // size + 1
    21. if(!isFull()){
    22. // head 如果等于0 ,则head = 数组长度-1,否则head = head -1
    23. head = head == 0 ? arr.length - 1 : head - 1;
    24. arr[head] = value;
    25. size++;
    26. return true;
    27. }else {
    28. return false;
    29. }
    30. }
    31. public boolean insertLast(int value) {
    32. // 1: 尾指针右移一位
    33. // 1.1:因为是循环队列,所以尾指针尾数组长度-1的时候,右移一位会变成0
    34. // 2:在尾指针处赋值
    35. // size + 1
    36. if(!isFull()){
    37. // tail 如果等于数组长度-1 ,则tail = 0 ,否则tail = tail+ 1
    38. tail = tail == arr.length - 1 ? 0 : tail + 1;
    39. arr[tail] = value;
    40. size++;
    41. return true;
    42. }else {
    43. return false;
    44. }
    45. }
    46. public boolean deleteFront() {
    47. //头指针右移,size -1
    48. if(!isEmpty()){
    49. head = head == arr.length - 1 ? 0 : head + 1;
    50. size--;
    51. return true;
    52. }else {
    53. return false;
    54. }
    55. }
    56. public boolean deleteLast() {
    57. //尾指针左移
    58. if(!isEmpty()){
    59. tail = tail == 0 ? arr.length - 1 : tail -1;
    60. size--;
    61. return true;
    62. }else {
    63. return false;
    64. }
    65. }
    66. public int getFront() {
    67. if(isEmpty()){
    68. return -1;
    69. }
    70. return arr[head];
    71. }
    72. public int getRear() {
    73. if(isEmpty()){
    74. return -1;
    75. }
    76. return arr[tail];
    77. }
    78. public boolean isEmpty() {
    79. return size == 0;
    80. }
    81. public boolean isFull() {
    82. return size == arr.length;
    83. }
    84. }